home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / mmsystem.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-02-09  |  188.6 KB  |  4,836 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Runtime Library                          }
  5. {       Windows 32bit API Interface Unit                }
  6. {       Multimedia Interface unit                       }
  7. {                                                       }
  8. {       Copyright (c) 1992,98 Borland International     }
  9. {                                                       }
  10. {*******************************************************}
  11.  
  12. unit MMSystem;
  13.  
  14. {$WEAKPACKAGEUNIT}
  15.  
  16. interface
  17.  
  18. (*$HPPEMIT '' *)
  19. (*$HPPEMIT '#include <mmsystem.h>' *)
  20. (*$HPPEMIT '' *)
  21.  
  22. uses Windows;
  23.  
  24.  
  25. {***************************************************************************
  26.  
  27.                     General constants and data types
  28.  
  29. ***************************************************************************}
  30.  
  31. { general constants }
  32. const
  33.   {$EXTERNALSYM MAXPNAMELEN}
  34.   MAXPNAMELEN      =  32;    { max product name length (including nil) }
  35.   {$EXTERNALSYM MAXERRORLENGTH}
  36.   MAXERRORLENGTH   = 128;    { max error text length (including nil) }
  37.   {$EXTERNALSYM MAX_JOYSTICKOEMVXDNAME}
  38.   MAX_JOYSTICKOEMVXDNAME = 260; { max oem vxd name length (including nil) }
  39.  
  40. {***************************************************************************
  41.  
  42.                          Manufacturer and product IDs
  43.  
  44.     Used with wMid and wPid fields in WAVEOUTCAPS, WAVEINCAPS,
  45.     MIDIOUTCAPS, MIDIINCAPS, AUXCAPS, JOYCAPS structures.
  46.  
  47. ***************************************************************************}
  48.  
  49. { manufacturer IDs }
  50. const
  51.   {$EXTERNALSYM MM_MICROSOFT}
  52.   MM_MICROSOFT            = 1;       { Microsoft Corp. }
  53.  
  54. { product IDs }
  55.   {$EXTERNALSYM MM_MIDI_MAPPER}
  56.   MM_MIDI_MAPPER          = 1;       { MIDI Mapper }
  57.   {$EXTERNALSYM MM_WAVE_MAPPER}
  58.   MM_WAVE_MAPPER          = 2;       { Wave Mapper }
  59.   {$EXTERNALSYM MM_SNDBLST_MIDIOUT}
  60.   MM_SNDBLST_MIDIOUT      = 3;       { Sound Blaster MIDI output port }
  61.   {$EXTERNALSYM MM_SNDBLST_MIDIIN}
  62.   MM_SNDBLST_MIDIIN       = 4;       { Sound Blaster MIDI input port  }
  63.   {$EXTERNALSYM MM_SNDBLST_SYNTH}
  64.   MM_SNDBLST_SYNTH        = 5;       { Sound Blaster internal synthesizer }
  65.   {$EXTERNALSYM MM_SNDBLST_WAVEOUT}
  66.   MM_SNDBLST_WAVEOUT      = 6;       { Sound Blaster waveform output }
  67.   {$EXTERNALSYM MM_SNDBLST_WAVEIN}
  68.   MM_SNDBLST_WAVEIN       = 7;       { Sound Blaster waveform input }
  69.   {$EXTERNALSYM MM_ADLIB}
  70.   MM_ADLIB                = 9;       { Ad Lib-compatible synthesizer }
  71.   {$EXTERNALSYM MM_MPU401_MIDIOUT}
  72.   MM_MPU401_MIDIOUT       = 10;      { MPU401-compatible MIDI output port }
  73.   {$EXTERNALSYM MM_MPU401_MIDIIN}
  74.   MM_MPU401_MIDIIN        = 11;      { MPU401-compatible MIDI input port }
  75.   {$EXTERNALSYM MM_PC_JOYSTICK}
  76.   MM_PC_JOYSTICK          = 12;      { Joystick adapter }
  77.  
  78.  
  79. { general data types }
  80. type
  81.   {$EXTERNALSYM VERSION}
  82.   VERSION = UINT;               { major (high byte), minor (low byte) }
  83.   {$EXTERNALSYM MMVERSION}
  84.   MMVERSION = UINT;             { major (high byte), minor (low byte) }
  85.   {$EXTERNALSYM MMRESULT}
  86.   MMRESULT = UINT;              { error return code, 0 means no error }
  87.  
  88. { types for wType field in MMTIME struct }
  89. const
  90.   {$EXTERNALSYM TIME_MS}
  91.   TIME_MS         = $0001;  { time in milliseconds }
  92.   {$EXTERNALSYM TIME_SAMPLES}
  93.   TIME_SAMPLES    = $0002;  { number of wave samples }
  94.   {$EXTERNALSYM TIME_BYTES}
  95.   TIME_BYTES      = $0004;  { current byte offset }
  96.   {$EXTERNALSYM TIME_SMPTE}
  97.   TIME_SMPTE      = $0008;  { SMPTE time }
  98.   {$EXTERNALSYM TIME_MIDI}
  99.   TIME_MIDI       = $0010;  { MIDI time }
  100.   {$EXTERNALSYM TIME_TICKS}
  101.   TIME_TICKS      = $0020;  { Ticks within MIDI stream }
  102.  
  103. { MMTIME data structure }
  104. type
  105.   PMMTime = ^TMMTime;
  106.   {$EXTERNALSYM mmtime_tag}
  107.   mmtime_tag = record
  108.     case wType: UINT of        { indicates the contents of the variant record }
  109.      TIME_MS:      (ms: DWORD);
  110.      TIME_SAMPLES: (sample: DWORD);
  111.      TIME_BYTES:   (cb: DWORD);
  112.      TIME_TICKS:   (ticks: DWORD);
  113.      TIME_SMPTE: (
  114.         hour: Byte;
  115.         min: Byte;
  116.         sec: Byte;
  117.         frame: Byte;
  118.         fps: Byte;
  119.         dummy: Byte;
  120.         pad: array[0..1] of Byte);
  121.       TIME_MIDI : (songptrpos: DWORD);
  122.   end;
  123.   TMMTime = mmtime_tag;
  124.   {$EXTERNALSYM MMTIME}
  125.   MMTIME = mmtime_tag;
  126.  
  127.  
  128. {***************************************************************************
  129.  
  130.                     Multimedia Extensions Window Messages
  131.  
  132. ***************************************************************************}
  133.  
  134. { joystick }
  135. const
  136.   {$EXTERNALSYM MM_JOY1MOVE}
  137.   MM_JOY1MOVE         = $3A0;
  138.   {$EXTERNALSYM MM_JOY2MOVE}
  139.   MM_JOY2MOVE         = $3A1;
  140.   {$EXTERNALSYM MM_JOY1ZMOVE}
  141.   MM_JOY1ZMOVE        = $3A2;
  142.   {$EXTERNALSYM MM_JOY2ZMOVE}
  143.   MM_JOY2ZMOVE        = $3A3;
  144.   {$EXTERNALSYM MM_JOY1BUTTONDOWN}
  145.   MM_JOY1BUTTONDOWN   = $3B5;
  146.   {$EXTERNALSYM MM_JOY2BUTTONDOWN}
  147.   MM_JOY2BUTTONDOWN   = $3B6;
  148.   {$EXTERNALSYM MM_JOY1BUTTONUP}
  149.   MM_JOY1BUTTONUP     = $3B7;
  150.   {$EXTERNALSYM MM_JOY2BUTTONUP}
  151.   MM_JOY2BUTTONUP     = $3B8;
  152.  
  153. { MCI }
  154.   {$EXTERNALSYM MM_MCINOTIFY}
  155.   MM_MCINOTIFY        = $3B9;
  156.  
  157. { waveform output }
  158.   {$EXTERNALSYM MM_WOM_OPEN}
  159.   MM_WOM_OPEN         = $3BB;
  160.   {$EXTERNALSYM MM_WOM_CLOSE}
  161.   MM_WOM_CLOSE        = $3BC;
  162.   {$EXTERNALSYM MM_WOM_DONE}
  163.   MM_WOM_DONE         = $3BD;
  164.  
  165. { waveform input }
  166.   {$EXTERNALSYM MM_WIM_OPEN}
  167.   MM_WIM_OPEN         = $3BE;
  168.   {$EXTERNALSYM MM_WIM_CLOSE}
  169.   MM_WIM_CLOSE        = $3BF;
  170.   {$EXTERNALSYM MM_WIM_DATA}
  171.   MM_WIM_DATA         = $3C0;
  172.  
  173. { MIDI input }
  174.   {$EXTERNALSYM MM_MIM_OPEN}
  175.   MM_MIM_OPEN         = $3C1;
  176.   {$EXTERNALSYM MM_MIM_CLOSE}
  177.   MM_MIM_CLOSE        = $3C2;
  178.   {$EXTERNALSYM MM_MIM_DATA}
  179.   MM_MIM_DATA         = $3C3;
  180.   {$EXTERNALSYM MM_MIM_LONGDATA}
  181.   MM_MIM_LONGDATA     = $3C4;
  182.   {$EXTERNALSYM MM_MIM_ERROR}
  183.   MM_MIM_ERROR        = $3C5;
  184.   {$EXTERNALSYM MM_MIM_LONGERROR}
  185.   MM_MIM_LONGERROR    = $3C6;
  186.  
  187. { MIDI output }
  188.   {$EXTERNALSYM MM_MOM_OPEN}
  189.   MM_MOM_OPEN         = $3C7;
  190.   {$EXTERNALSYM MM_MOM_CLOSE}
  191.   MM_MOM_CLOSE        = $3C8;
  192.   {$EXTERNALSYM MM_MOM_DONE}
  193.   MM_MOM_DONE         = $3C9;
  194.  
  195.   {$EXTERNALSYM MM_DRVM_OPEN}
  196.   MM_DRVM_OPEN        = $3D0;
  197.   {$EXTERNALSYM MM_DRVM_CLOSE}
  198.   MM_DRVM_CLOSE       = $3D1;
  199.   {$EXTERNALSYM MM_DRVM_DATA}
  200.   MM_DRVM_DATA        = $3D2;
  201.   {$EXTERNALSYM MM_DRVM_ERROR}
  202.   MM_DRVM_ERROR       = $3D3;
  203.  
  204.   {$EXTERNALSYM MM_STREAM_OPEN}
  205.   MM_STREAM_OPEN        = $3D4;
  206.   {$EXTERNALSYM MM_STREAM_CLOSE}
  207.   MM_STREAM_CLOSE        = $3D5;
  208.   {$EXTERNALSYM MM_STREAM_DONE}
  209.   MM_STREAM_DONE        = $3D6;
  210.   {$EXTERNALSYM MM_STREAM_ERROR}
  211.   MM_STREAM_ERROR        = $3D7;
  212.  
  213.   {$EXTERNALSYM MM_MOM_POSITIONCB}
  214.   MM_MOM_POSITIONCB   = $3CA;
  215.  
  216.   {$EXTERNALSYM MM_MCISIGNAL}
  217.   MM_MCISIGNAL        = $3CB;
  218.   {$EXTERNALSYM MM_MIM_MOREDATA}
  219.   MM_MIM_MOREDATA     = $3CC;
  220.  
  221.   {$EXTERNALSYM MM_MIXM_LINE_CHANGE}
  222.   MM_MIXM_LINE_CHANGE     = $3D0;
  223.   {$EXTERNALSYM MM_MIXM_CONTROL_CHANGE}
  224.   MM_MIXM_CONTROL_CHANGE  = $3D1;
  225.  
  226. {***************************************************************************
  227.  
  228.                 String resource number bases (internal use)
  229.  
  230. ***************************************************************************}
  231.  
  232. const
  233.   {$EXTERNALSYM MMSYSERR_BASE}
  234.   MMSYSERR_BASE          = 0;
  235.   {$EXTERNALSYM WAVERR_BASE}
  236.   WAVERR_BASE            = 32;
  237.   {$EXTERNALSYM MIDIERR_BASE}
  238.   MIDIERR_BASE           = 64;
  239.   {$EXTERNALSYM TIMERR_BASE}
  240.   TIMERR_BASE            = 96;
  241.   {$EXTERNALSYM JOYERR_BASE}
  242.   JOYERR_BASE            = 160;
  243.   {$EXTERNALSYM MCIERR_BASE}
  244.   MCIERR_BASE            = 256;
  245.   {$EXTERNALSYM MIXERR_BASE}
  246.   MIXERR_BASE            = 1024;
  247.  
  248.   {$EXTERNALSYM MCI_STRING_OFFSET}
  249.   MCI_STRING_OFFSET      = 512;
  250.   {$EXTERNALSYM MCI_VD_OFFSET}
  251.   MCI_VD_OFFSET          = 1024;
  252.   {$EXTERNALSYM MCI_CD_OFFSET}
  253.   MCI_CD_OFFSET          = 1088;
  254.   {$EXTERNALSYM MCI_WAVE_OFFSET}
  255.   MCI_WAVE_OFFSET        = 1152;
  256.   {$EXTERNALSYM MCI_SEQ_OFFSET}
  257.   MCI_SEQ_OFFSET         = 1216;
  258.  
  259. {***************************************************************************
  260.  
  261.                         General error return values
  262.  
  263. ***************************************************************************}
  264.  
  265. { general error return values }
  266. const
  267.   {$EXTERNALSYM MMSYSERR_NOERROR}
  268.   MMSYSERR_NOERROR      = 0;                  { no error }
  269.   {$EXTERNALSYM MMSYSERR_ERROR}
  270.   MMSYSERR_ERROR        = MMSYSERR_BASE + 1;  { unspecified error }
  271.   {$EXTERNALSYM MMSYSERR_BADDEVICEID}
  272.   MMSYSERR_BADDEVICEID  = MMSYSERR_BASE + 2;  { device ID out of range }
  273.   {$EXTERNALSYM MMSYSERR_NOTENABLED}
  274.   MMSYSERR_NOTENABLED   = MMSYSERR_BASE + 3;  { driver failed enable }
  275.   {$EXTERNALSYM MMSYSERR_ALLOCATED}
  276.   MMSYSERR_ALLOCATED    = MMSYSERR_BASE + 4;  { device already allocated }
  277.   {$EXTERNALSYM MMSYSERR_INVALHANDLE}
  278.   MMSYSERR_INVALHANDLE  = MMSYSERR_BASE + 5;  { device handle is invalid }
  279.   {$EXTERNALSYM MMSYSERR_NODRIVER}
  280.   MMSYSERR_NODRIVER     = MMSYSERR_BASE + 6;  { no device driver present }
  281.   {$EXTERNALSYM MMSYSERR_NOMEM}
  282.   MMSYSERR_NOMEM        = MMSYSERR_BASE + 7;  { memory allocation error }
  283.   {$EXTERNALSYM MMSYSERR_NOTSUPPORTED}
  284.   MMSYSERR_NOTSUPPORTED = MMSYSERR_BASE + 8;  { function isn't supported }
  285.   {$EXTERNALSYM MMSYSERR_BADERRNUM}
  286.   MMSYSERR_BADERRNUM    = MMSYSERR_BASE + 9;  { error value out of range }
  287.   {$EXTERNALSYM MMSYSERR_INVALFLAG}
  288.   MMSYSERR_INVALFLAG    = MMSYSERR_BASE + 10; { invalid flag passed }
  289.   {$EXTERNALSYM MMSYSERR_INVALPARAM}
  290.   MMSYSERR_INVALPARAM   = MMSYSERR_BASE + 11; { invalid parameter passed }
  291.   {$EXTERNALSYM MMSYSERR_HANDLEBUSY}
  292.   MMSYSERR_HANDLEBUSY   = MMSYSERR_BASE + 12; { handle being used
  293.                                                 simultaneously on another
  294.                                                 thread (eg callback) }
  295.   {$EXTERNALSYM MMSYSERR_INVALIDALIAS}
  296.   MMSYSERR_INVALIDALIAS = MMSYSERR_BASE + 13; { specified alias not found }
  297.   {$EXTERNALSYM MMSYSERR_BADDB}
  298.   MMSYSERR_BADDB        = MMSYSERR_BASE + 14; { bad registry database }
  299.   {$EXTERNALSYM MMSYSERR_KEYNOTFOUND}
  300.   MMSYSERR_KEYNOTFOUND  = MMSYSERR_BASE + 15; { registry key not found }
  301.   {$EXTERNALSYM MMSYSERR_READERROR}
  302.   MMSYSERR_READERROR    = MMSYSERR_BASE + 16; { registry read error }
  303.   {$EXTERNALSYM MMSYSERR_WRITEERROR}
  304.   MMSYSERR_WRITEERROR   = MMSYSERR_BASE + 17; { registry write error }
  305.   {$EXTERNALSYM MMSYSERR_DELETEERROR}
  306.   MMSYSERR_DELETEERROR  = MMSYSERR_BASE + 18; { registry delete error }
  307.   {$EXTERNALSYM MMSYSERR_VALNOTFOUND}
  308.   MMSYSERR_VALNOTFOUND  = MMSYSERR_BASE + 19; { registry value not found }
  309.   {$EXTERNALSYM MMSYSERR_NODRIVERCB}
  310.   MMSYSERR_NODRIVERCB   = MMSYSERR_BASE + 20; { driver does not call DriverCallback }
  311.   {$EXTERNALSYM MMSYSERR_LASTERROR}
  312.   MMSYSERR_LASTERROR    = MMSYSERR_BASE + 20; { last error in range }
  313.  
  314. type
  315.   {$EXTERNALSYM HDRVR}
  316.   HDRVR = Integer;
  317.  
  318. {***************************************************************************
  319.  
  320.                         Installable driver support
  321.  
  322. ***************************************************************************}
  323.  
  324. type
  325.   PDrvConfigInfoEx = ^TDrvConfigInfoEx;
  326.   {$EXTERNALSYM DRVCONFIGINFOEX}
  327.   DRVCONFIGINFOEX = packed record
  328.     dwDCISize: DWORD;
  329.     lpszDCISectionName: PWideChar;
  330.     lpszDCIAliasName: PWideChar;
  331.     dnDevNode: DWORD;
  332.   end;
  333.   TDrvConfigInfoEx = DRVCONFIGINFOEX;
  334.  
  335. const
  336. { Driver messages }
  337.   {$EXTERNALSYM DRV_LOAD}
  338.   DRV_LOAD                = $0001;
  339.   {$EXTERNALSYM DRV_ENABLE}
  340.   DRV_ENABLE              = $0002;
  341.   {$EXTERNALSYM DRV_OPEN}
  342.   DRV_OPEN                = $0003;
  343.   {$EXTERNALSYM DRV_CLOSE}
  344.   DRV_CLOSE               = $0004;
  345.   {$EXTERNALSYM DRV_DISABLE}
  346.   DRV_DISABLE             = $0005;
  347.   {$EXTERNALSYM DRV_FREE}
  348.   DRV_FREE                = $0006;
  349.   {$EXTERNALSYM DRV_CONFIGURE}
  350.   DRV_CONFIGURE           = $0007;
  351.   {$EXTERNALSYM DRV_QUERYCONFIGURE}
  352.   DRV_QUERYCONFIGURE      = $0008;
  353.   {$EXTERNALSYM DRV_INSTALL}
  354.   DRV_INSTALL             = $0009;
  355.   {$EXTERNALSYM DRV_REMOVE}
  356.   DRV_REMOVE              = $000A;
  357.   {$EXTERNALSYM DRV_EXITSESSION}
  358.   DRV_EXITSESSION         = $000B;
  359.   {$EXTERNALSYM DRV_POWER}
  360.   DRV_POWER               = $000F;
  361.   {$EXTERNALSYM DRV_RESERVED}
  362.   DRV_RESERVED            = $0800;
  363.   {$EXTERNALSYM DRV_USER}
  364.   DRV_USER                = $4000;
  365.  
  366. type
  367. { LPARAM of DRV_CONFIGURE message }
  368.   PDrvConfigInfo = ^TDrvConfigInfo;
  369.   {$EXTERNALSYM tagDRVCONFIGINFO}
  370.   tagDRVCONFIGINFO = packed record
  371.     dwDCISize: DWORD;
  372.     lpszDCISectionName: PWideChar;
  373.     lpszDCIAliasName: PWideChar;
  374.   end;
  375.   TDrvConfigInfo = tagDRVCONFIGINFO;
  376.   {$EXTERNALSYM DRVCONFIGINFO}
  377.   DRVCONFIGINFO = tagDRVCONFIGINFO;
  378.  
  379. const
  380. { Supported return values for DRV_CONFIGURE message }
  381.   {$EXTERNALSYM DRVCNF_CANCEL}
  382.   DRVCNF_CANCEL           = $0000;
  383.   {$EXTERNALSYM DRVCNF_OK}
  384.   DRVCNF_OK               = $0001;
  385.   {$EXTERNALSYM DRVCNF_RESTART}
  386.   DRVCNF_RESTART          = $0002;
  387.  
  388.  
  389. { installable driver function prototypes }
  390. type 
  391.   TFNDriverProc = function(dwDriverId: DWORD; hdrvr: HDRVR; 
  392.     msg: UINT; lparam1, lparam2: LPARAM): Longint stdcall;
  393.  
  394. {$EXTERNALSYM CloseDriver}
  395. function CloseDriver(hDriver: HDRVR; lParam1, lParam2: Longint): Longint; stdcall;
  396. {$EXTERNALSYM OpenDriver}
  397. function OpenDriver(szDriverName: PWideChar; szSectionName: PWideChar; lParam2: Longint): HDRVR; stdcall;
  398. {$EXTERNALSYM SendDriverMessage}
  399. function SendDriverMessage(hDriver: HDRVR; message: UINT; lParam1, lParam2: Longint): Longint; stdcall;
  400. {$EXTERNALSYM DrvGetModuleHandle}
  401. function DrvGetModuleHandle(hDriver: HDRVR): HMODULE; stdcall;
  402. {$EXTERNALSYM GetDriverModuleHandle}
  403. function GetDriverModuleHandle(hDriver: HDRVR): HMODULE; stdcall;
  404. {$EXTERNALSYM DefDriverProc}
  405. function DefDriverProc(dwDriverIdentifier: DWORD; hdrvr: HDRVR; uMsg: UINT; 
  406.   lParam1, lParam2: LPARAM): Longint; stdcall;
  407.  
  408. { return values from DriverProc() function }
  409. const
  410.   {$EXTERNALSYM DRV_CANCEL}
  411.   DRV_CANCEL             = DRVCNF_CANCEL;
  412.   {$EXTERNALSYM DRV_OK}
  413.   DRV_OK                 = DRVCNF_OK;
  414.   {$EXTERNALSYM DRV_RESTART}
  415.   DRV_RESTART            = DRVCNF_RESTART;
  416.  
  417.   {$EXTERNALSYM DRV_MCI_FIRST}
  418.   DRV_MCI_FIRST          = DRV_RESERVED;
  419.   {$EXTERNALSYM DRV_MCI_LAST}
  420.   DRV_MCI_LAST           = DRV_RESERVED + $FFF;
  421.  
  422.  
  423. {***************************************************************************
  424.  
  425.                           Driver callback support
  426.  
  427. ***************************************************************************}
  428.  
  429. { flags used with waveOutOpen(), waveInOpen(), midiInOpen(), and }
  430. { midiOutOpen() to specify the type of the dwCallback parameter. }
  431.  
  432. const
  433.   {$EXTERNALSYM CALLBACK_TYPEMASK}
  434.   CALLBACK_TYPEMASK   = $00070000;    { callback type mask }
  435.   {$EXTERNALSYM CALLBACK_NULL}
  436.   CALLBACK_NULL       = $00000000;    { no callback }
  437.   {$EXTERNALSYM CALLBACK_WINDOW}
  438.   CALLBACK_WINDOW     = $00010000;    { dwCallback is a HWND }
  439.   {$EXTERNALSYM CALLBACK_TASK}
  440.   CALLBACK_TASK       = $00020000;    { dwCallback is a HTASK }
  441.   {$EXTERNALSYM CALLBACK_FUNCTION}
  442.   CALLBACK_FUNCTION   = $00030000;    { dwCallback is a FARPROC }
  443.   {$EXTERNALSYM CALLBACK_THREAD}
  444.   CALLBACK_THREAD     = CALLBACK_TASK;{ thread ID replaces 16 bit task }
  445.   {$EXTERNALSYM CALLBACK_EVENT}
  446.   CALLBACK_EVENT      = $00050000;    { dwCallback is an EVENT Handle }
  447.  
  448. { driver callback prototypes }
  449.  
  450. type
  451.   TFNDrvCallBack = procedure(hdrvr: HDRVR; uMsg: UINT; dwUser: DWORD;
  452.     dw1, dw2: DWORD) stdcall;
  453.  
  454.  
  455. {***************************************************************************
  456.  
  457.                     General MMSYSTEM support
  458.  
  459. ***************************************************************************}
  460.  
  461. {$EXTERNALSYM mmsystemGetVersion}
  462. function mmsystemGetVersion: UINT; stdcall;
  463.  
  464. {***************************************************************************
  465.  
  466.                             Sound support
  467.  
  468. ***************************************************************************}
  469.  
  470. {$EXTERNALSYM sndPlaySoundA}
  471. function sndPlaySoundA(lpszSoundName: PAnsiChar; uFlags: UINT): BOOL; stdcall;
  472. {$EXTERNALSYM sndPlaySoundW}
  473. function sndPlaySoundW(lpszSoundName: PWideChar; uFlags: UINT): BOOL; stdcall;
  474. {$EXTERNALSYM sndPlaySound}
  475. function sndPlaySound(lpszSoundName: PChar; uFlags: UINT): BOOL; stdcall;
  476.  
  477. { flag values for wFlags parameter }
  478. const
  479.   {$EXTERNALSYM SND_SYNC}
  480.   SND_SYNC            = $0000;  { play synchronously (default) }
  481.   {$EXTERNALSYM SND_ASYNC}
  482.   SND_ASYNC           = $0001;  { play asynchronously }
  483.   {$EXTERNALSYM SND_NODEFAULT}
  484.   SND_NODEFAULT       = $0002;  { don't use default sound }
  485.   {$EXTERNALSYM SND_MEMORY}
  486.   SND_MEMORY          = $0004;  { lpszSoundName points to a memory file }
  487.   {$EXTERNALSYM SND_LOOP}
  488.   SND_LOOP            = $0008;  { loop the sound until next sndPlaySound }
  489.   {$EXTERNALSYM SND_NOSTOP}
  490.   SND_NOSTOP          = $0010;  { don't stop any currently playing sound }
  491.  
  492.   {$EXTERNALSYM SND_NOWAIT}
  493.   SND_NOWAIT          = $00002000;  { don't wait if the driver is busy }
  494.   {$EXTERNALSYM SND_ALIAS}
  495.   SND_ALIAS           = $00010000;  { name is a registry alias }
  496.   {$EXTERNALSYM SND_ALIAS_ID}
  497.   SND_ALIAS_ID        = $00110000;  { alias is a predefined ID }
  498.   {$EXTERNALSYM SND_FILENAME}
  499.   SND_FILENAME        = $00020000;  { name is file name }
  500.   {$EXTERNALSYM SND_RESOURCE}
  501.   SND_RESOURCE        = $00040004;  { name is resource name or atom }
  502.   {$EXTERNALSYM SND_PURGE}
  503.   SND_PURGE           = $0040;      { purge non-static events for task }
  504.   {$EXTERNALSYM SND_APPLICATION}
  505.   SND_APPLICATION     = $0080;      { look for application specific association }
  506.  
  507.   {$EXTERNALSYM SND_ALIAS_START}
  508.   SND_ALIAS_START     = 0;   { alias base }
  509.  
  510.   {$EXTERNALSYM SND_ALIAS_SYSTEMASTERISK}
  511.   SND_ALIAS_SYSTEMASTERISK       = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('*')) shl 8));
  512.   {$EXTERNALSYM SND_ALIAS_SYSTEMQUESTION}
  513.   SND_ALIAS_SYSTEMQUESTION       = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('?')) shl 8));
  514.   {$EXTERNALSYM SND_ALIAS_SYSTEMHAND}
  515.   SND_ALIAS_SYSTEMHAND           = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('H')) shl 8));
  516.   {$EXTERNALSYM SND_ALIAS_SYSTEMEXIT}
  517.   SND_ALIAS_SYSTEMEXIT           = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('E')) shl 8));
  518.   {$EXTERNALSYM SND_ALIAS_SYSTEMSTART}
  519.   SND_ALIAS_SYSTEMSTART          = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('S')) shl 8));
  520.   {$EXTERNALSYM SND_ALIAS_SYSTEMWELCOME}
  521.   SND_ALIAS_SYSTEMWELCOME        = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('W')) shl 8));
  522.   {$EXTERNALSYM SND_ALIAS_SYSTEMEXCLAMATION}
  523.   SND_ALIAS_SYSTEMEXCLAMATION    = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('!')) shl 8));
  524.   {$EXTERNALSYM SND_ALIAS_SYSTEMDEFAULT}
  525.   SND_ALIAS_SYSTEMDEFAULT        = SND_ALIAS_START + (Longint(Ord('S')) or (Longint(Ord('D')) shl 8));
  526.  
  527. {$EXTERNALSYM PlaySoundA}
  528. function PlaySoundA(pszSound: PAnsiChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;
  529. {$EXTERNALSYM PlaySoundW}
  530. function PlaySoundW(pszSound: PWideChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;
  531. {$EXTERNALSYM PlaySound}
  532. function PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL; stdcall;
  533.  
  534. {***************************************************************************
  535.  
  536.                         Waveform audio support
  537.  
  538. ***************************************************************************}
  539.  
  540. { waveform audio error return values }
  541. const
  542.   {$EXTERNALSYM WAVERR_BADFORMAT}
  543.   WAVERR_BADFORMAT      = WAVERR_BASE + 0;    { unsupported wave format }
  544.   {$EXTERNALSYM WAVERR_STILLPLAYING}
  545.   WAVERR_STILLPLAYING   = WAVERR_BASE + 1;    { still something playing }
  546.   {$EXTERNALSYM WAVERR_UNPREPARED}
  547.   WAVERR_UNPREPARED     = WAVERR_BASE + 2;    { header not prepared }
  548.   {$EXTERNALSYM WAVERR_SYNC}
  549.   WAVERR_SYNC           = WAVERR_BASE + 3;    { device is synchronous }
  550.   {$EXTERNALSYM WAVERR_LASTERROR}
  551.   WAVERR_LASTERROR      = WAVERR_BASE + 3;    { last error in range }
  552.  
  553. { waveform audio data types }
  554. type
  555.   PHWAVE = ^HWAVE;
  556.   {$EXTERNALSYM HWAVE}
  557.   HWAVE = Integer;
  558.   PHWAVEIN = ^HWAVEIN;
  559.   {$EXTERNALSYM HWAVEIN}
  560.   HWAVEIN = Integer;
  561.   PHWAVEOUT = ^HWAVEOUT;
  562.   {$EXTERNALSYM HWAVEOUT}
  563.   HWAVEOUT = Integer;
  564.  
  565. type
  566.   TFNWaveCallBack = TFNDrvCallBack;
  567.  
  568. { wave callback messages }
  569. const
  570.   {$EXTERNALSYM WOM_OPEN}
  571.   WOM_OPEN        = MM_WOM_OPEN;
  572.   {$EXTERNALSYM WOM_CLOSE}
  573.   WOM_CLOSE       = MM_WOM_CLOSE;
  574.   {$EXTERNALSYM WOM_DONE}
  575.   WOM_DONE        = MM_WOM_DONE;
  576.   {$EXTERNALSYM WIM_OPEN}
  577.   WIM_OPEN        = MM_WIM_OPEN;
  578.   {$EXTERNALSYM WIM_CLOSE}
  579.   WIM_CLOSE       = MM_WIM_CLOSE;
  580.   {$EXTERNALSYM WIM_DATA}
  581.   WIM_DATA        = MM_WIM_DATA;
  582.  
  583. { device ID for wave device mapper }
  584.   {$EXTERNALSYM WAVE_MAPPER}
  585.   WAVE_MAPPER     = UINT(-1);
  586.  
  587. { flags for dwFlags parameter in waveOutOpen() and waveInOpen() }
  588.   {$EXTERNALSYM WAVE_FORMAT_QUERY}
  589.   WAVE_FORMAT_QUERY     = $0001;
  590.   {$EXTERNALSYM WAVE_ALLOWSYNC}
  591.   WAVE_ALLOWSYNC        = $0002;
  592.   {$EXTERNALSYM WAVE_MAPPED}
  593.   WAVE_MAPPED           = $0004;
  594.  
  595. { wave data block header }
  596. type
  597.   PWaveHdr = ^TWaveHdr;
  598.   {$EXTERNALSYM wavehdr_tag}
  599.   wavehdr_tag = record
  600.     lpData: PChar;              { pointer to locked data buffer }
  601.     dwBufferLength: DWORD;      { length of data buffer }
  602.     dwBytesRecorded: DWORD;     { used for input only }
  603.     dwUser: DWORD;              { for client's use }
  604.     dwFlags: DWORD;             { assorted flags (see defines) }
  605.     dwLoops: DWORD;             { loop control counter }
  606.     lpNext: PWaveHdr;           { reserved for driver }
  607.     reserved: DWORD;            { reserved for driver }
  608.   end;
  609.   TWaveHdr = wavehdr_tag;
  610.   {$EXTERNALSYM WAVEHDR}
  611.   WAVEHDR = wavehdr_tag;
  612.  
  613.  
  614. { flags for dwFlags field of WAVEHDR }
  615. const
  616.   {$EXTERNALSYM WHDR_DONE}
  617.   WHDR_DONE       = $00000001;  { done bit }
  618.   {$EXTERNALSYM WHDR_PREPARED}
  619.   WHDR_PREPARED   = $00000002;  { set if this header has been prepared }
  620.   {$EXTERNALSYM WHDR_BEGINLOOP}
  621.   WHDR_BEGINLOOP  = $00000004;  { loop start block }
  622.   {$EXTERNALSYM WHDR_ENDLOOP}
  623.   WHDR_ENDLOOP    = $00000008;  { loop end block }
  624.   {$EXTERNALSYM WHDR_INQUEUE}
  625.   WHDR_INQUEUE    = $00000010;  { reserved for driver }
  626.  
  627. { waveform output device capabilities structure }
  628. type
  629.   PWaveOutCapsA = ^TWaveOutCapsA;
  630.   PWaveOutCapsW = ^TWaveOutCapsW;
  631.   PWaveOutCaps = PWaveOutCapsA;
  632.   {$EXTERNALSYM tagWAVEOUTCAPSA}
  633.   tagWAVEOUTCAPSA = record
  634.     wMid: Word;                 { manufacturer ID }
  635.     wPid: Word;                 { product ID }
  636.     vDriverVersion: MMVERSION;       { version of the driver }
  637.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  638.     dwFormats: DWORD;          { formats supported }
  639.     wChannels: Word;            { number of sources supported }
  640.     dwSupport: DWORD;          { functionality supported by driver }
  641.   end;
  642.   {$EXTERNALSYM tagWAVEOUTCAPSW}
  643.   tagWAVEOUTCAPSW = record
  644.     wMid: Word;                 { manufacturer ID }
  645.     wPid: Word;                 { product ID }
  646.     vDriverVersion: MMVERSION;       { version of the driver }
  647.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  648.     dwFormats: DWORD;          { formats supported }
  649.     wChannels: Word;            { number of sources supported }
  650.     dwSupport: DWORD;          { functionality supported by driver }
  651.   end;
  652.   {$EXTERNALSYM tagWAVEOUTCAPS}
  653.   tagWAVEOUTCAPS = tagWAVEOUTCAPSA;
  654.   TWaveOutCapsA = tagWAVEOUTCAPSA;
  655.   TWaveOutCapsW = tagWAVEOUTCAPSW;
  656.   TWaveOutCaps = TWaveOutCapsA;
  657.   {$EXTERNALSYM WAVEOUTCAPSA}
  658.   WAVEOUTCAPSA = tagWAVEOUTCAPSA;
  659.   {$EXTERNALSYM WAVEOUTCAPSW}
  660.   WAVEOUTCAPSW = tagWAVEOUTCAPSW;
  661.   {$EXTERNALSYM WAVEOUTCAPS}
  662.   WAVEOUTCAPS = WAVEOUTCAPSA;
  663.  
  664.  
  665. { flags for dwSupport field of WAVEOUTCAPS }
  666. const
  667.   {$EXTERNALSYM WAVECAPS_PITCH}
  668.   WAVECAPS_PITCH          = $0001;   { supports pitch control }
  669.   {$EXTERNALSYM WAVECAPS_PLAYBACKRATE}
  670.   WAVECAPS_PLAYBACKRATE   = $0002;   { supports playback rate control }
  671.   {$EXTERNALSYM WAVECAPS_VOLUME}
  672.   WAVECAPS_VOLUME         = $0004;   { supports volume control }
  673.   {$EXTERNALSYM WAVECAPS_LRVOLUME}
  674.   WAVECAPS_LRVOLUME       = $0008;   { separate left-right volume control }
  675.   {$EXTERNALSYM WAVECAPS_SYNC}
  676.   WAVECAPS_SYNC           = $0010;
  677.   {$EXTERNALSYM WAVECAPS_SAMPLEACCURATE}
  678.   WAVECAPS_SAMPLEACCURATE = $0020;
  679.   {$EXTERNALSYM WAVECAPS_DIRECTSOUND}
  680.   WAVECAPS_DIRECTSOUND    = $0040;
  681.  
  682. { waveform input device capabilities structure }
  683. type
  684.   PWaveInCapsA = ^TWaveInCapsA;
  685.   PWaveInCapsW = ^TWaveInCapsW;
  686.   PWaveInCaps = PWaveInCapsA;
  687.   {$EXTERNALSYM tagWAVEINCAPSA}
  688.   tagWAVEINCAPSA = record
  689.     wMid: Word;                   { manufacturer ID }
  690.     wPid: Word;                   { product ID }
  691.     vDriverVersion: MMVERSION;         { version of the driver }
  692.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;    { product name (NULL terminated string) }
  693.     dwFormats: DWORD;             { formats supported }
  694.     wChannels: Word;              { number of channels supported }
  695.     wReserved1: Word;             { structure packing }
  696.   end;
  697.   {$EXTERNALSYM tagWAVEINCAPSW}
  698.   tagWAVEINCAPSW = record
  699.     wMid: Word;                   { manufacturer ID }
  700.     wPid: Word;                   { product ID }
  701.     vDriverVersion: MMVERSION;         { version of the driver }
  702.     szPname: array[0..MAXPNAMELEN-1] of WideChar;    { product name (NULL terminated string) }
  703.     dwFormats: DWORD;             { formats supported }
  704.     wChannels: Word;              { number of channels supported }
  705.     wReserved1: Word;             { structure packing }
  706.   end;
  707.   {$EXTERNALSYM tagWAVEINCAPS}
  708.   tagWAVEINCAPS = tagWAVEINCAPSA;
  709.   TWaveInCapsA = tagWAVEINCAPSA;
  710.   TWaveInCapsW = tagWAVEINCAPSW;
  711.   TWaveInCaps = TWaveInCapsA;
  712.   {$EXTERNALSYM WAVEINCAPSA}
  713.   WAVEINCAPSA = tagWAVEINCAPSA;
  714.   {$EXTERNALSYM WAVEINCAPSW}
  715.   WAVEINCAPSW = tagWAVEINCAPSW;
  716.   {$EXTERNALSYM WAVEINCAPS}
  717.   WAVEINCAPS = WAVEINCAPSA;
  718.  
  719.  
  720. { defines for dwFormat field of WAVEINCAPS and WAVEOUTCAPS }
  721. const
  722.   {$EXTERNALSYM WAVE_INVALIDFORMAT}
  723.   WAVE_INVALIDFORMAT     = $00000000;       { invalid format }
  724.   {$EXTERNALSYM WAVE_FORMAT_1M08}
  725.   WAVE_FORMAT_1M08       = $00000001;       { 11.025 kHz, Mono,   8-bit  }
  726.   {$EXTERNALSYM WAVE_FORMAT_1S08}
  727.   WAVE_FORMAT_1S08       = $00000002;       { 11.025 kHz, Stereo, 8-bit  }
  728.   {$EXTERNALSYM WAVE_FORMAT_1M16}
  729.   WAVE_FORMAT_1M16       = $00000004;       { 11.025 kHz, Mono,   16-bit }
  730.   {$EXTERNALSYM WAVE_FORMAT_1S16}
  731.   WAVE_FORMAT_1S16       = $00000008;       { 11.025 kHz, Stereo, 16-bit }
  732.   {$EXTERNALSYM WAVE_FORMAT_2M08}
  733.   WAVE_FORMAT_2M08       = $00000010;       { 22.05  kHz, Mono,   8-bit  }
  734.   {$EXTERNALSYM WAVE_FORMAT_2S08}
  735.   WAVE_FORMAT_2S08       = $00000020;       { 22.05  kHz, Stereo, 8-bit  }
  736.   {$EXTERNALSYM WAVE_FORMAT_2M16}
  737.   WAVE_FORMAT_2M16       = $00000040;       { 22.05  kHz, Mono,   16-bit }
  738.   {$EXTERNALSYM WAVE_FORMAT_2S16}
  739.   WAVE_FORMAT_2S16       = $00000080;       { 22.05  kHz, Stereo, 16-bit }
  740.   {$EXTERNALSYM WAVE_FORMAT_4M08}
  741.   WAVE_FORMAT_4M08       = $00000100;       { 44.1   kHz, Mono,   8-bit  }
  742.   {$EXTERNALSYM WAVE_FORMAT_4S08}
  743.   WAVE_FORMAT_4S08       = $00000200;       { 44.1   kHz, Stereo, 8-bit  }
  744.   {$EXTERNALSYM WAVE_FORMAT_4M16}
  745.   WAVE_FORMAT_4M16       = $00000400;       { 44.1   kHz, Mono,   16-bit }
  746.   {$EXTERNALSYM WAVE_FORMAT_4S16}
  747.   WAVE_FORMAT_4S16       = $00000800;       { 44.1   kHz, Stereo, 16-bit }
  748.  
  749. { general waveform format structure (information common to all formats) }
  750. type
  751.   PWaveFormat = ^TWaveFormat;
  752.   {$EXTERNALSYM waveformat_tag}
  753.   waveformat_tag = packed record
  754.     wFormatTag: Word;         { format type }
  755.     nChannels: Word;          { number of channels (i.e. mono, stereo, etc.) }
  756.     nSamplesPerSec: DWORD;  { sample rate }
  757.     nAvgBytesPerSec: DWORD; { for buffer estimation }
  758.     nBlockAlign: Word;      { block size of data }
  759.   end;
  760.   TWaveFormat = waveformat_tag;
  761.   {$EXTERNALSYM WAVEFORMAT}
  762.   WAVEFORMAT = waveformat_tag;
  763.  
  764. { flags for wFormatTag field of WAVEFORMAT }
  765. const
  766.   {$EXTERNALSYM WAVE_FORMAT_PCM}
  767.   WAVE_FORMAT_PCM     = 1;
  768.  
  769. { specific waveform format structure for PCM data }
  770. type
  771.   PPCMWaveFormat = ^TPCMWaveFormat;
  772.   {$EXTERNALSYM pcmwaveformat_tag}
  773.   pcmwaveformat_tag = record
  774.       wf: TWaveFormat;
  775.       wBitsPerSample: Word;
  776.    end;
  777.   TPCMWaveFormat = pcmwaveformat_tag;
  778.   {$EXTERNALSYM PCMWAVEFORMAT}
  779.   PCMWAVEFORMAT = pcmwaveformat_tag;
  780.  
  781.  
  782. { extended waveform format structure used for all non-PCM formats. this
  783.   structure is common to all non-PCM formats. }
  784.  
  785.   PWaveFormatEx = ^TWaveFormatEx;
  786.   {$EXTERNALSYM tWAVEFORMATEX}
  787.   tWAVEFORMATEX = packed record
  788.     wFormatTag: Word;         { format type }
  789.     nChannels: Word;          { number of channels (i.e. mono, stereo, etc.) }
  790.     nSamplesPerSec: DWORD;  { sample rate }
  791.     nAvgBytesPerSec: DWORD; { for buffer estimation }
  792.     nBlockAlign: Word;      { block size of data }
  793.     wBitsPerSample: Word;   { number of bits per sample of mono data }
  794.     cbSize: Word;           { the count in bytes of the size of }
  795.   end;
  796.  
  797.  
  798. { waveform audio function prototypes }
  799. {$EXTERNALSYM waveOutGetNumDevs}
  800. function waveOutGetNumDevs: UINT; stdcall;
  801.  
  802. {$EXTERNALSYM waveOutGetDevCapsA}
  803. function waveOutGetDevCapsA(uDeviceID: UINT; lpCaps: PWaveOutCapsA; uSize: UINT): MMRESULT; stdcall;
  804. {$EXTERNALSYM waveOutGetDevCapsW}
  805. function waveOutGetDevCapsW(uDeviceID: UINT; lpCaps: PWaveOutCapsW; uSize: UINT): MMRESULT; stdcall;
  806. {$EXTERNALSYM waveOutGetDevCaps}
  807. function waveOutGetDevCaps(uDeviceID: UINT; lpCaps: PWaveOutCaps; uSize: UINT): MMRESULT; stdcall;
  808. {$EXTERNALSYM waveOutGetVolume}
  809. function waveOutGetVolume(hwo: HWAVEOUT; lpdwVolume: PDWORD): MMRESULT; stdcall;
  810. {$EXTERNALSYM waveOutSetVolume}
  811. function waveOutSetVolume(hwo: HWAVEOUT; dwVolume: DWORD): MMRESULT; stdcall;
  812. {$EXTERNALSYM waveOutGetErrorTextA}
  813. function waveOutGetErrorTextA(mmrError: MMRESULT; lpText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  814. {$EXTERNALSYM waveOutGetErrorTextW}
  815. function waveOutGetErrorTextW(mmrError: MMRESULT; lpText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  816. {$EXTERNALSYM waveOutGetErrorText}
  817. function waveOutGetErrorText(mmrError: MMRESULT; lpText: PChar; uSize: UINT): MMRESULT; stdcall;
  818. {$EXTERNALSYM waveOutOpen}
  819. function waveOutOpen(lphWaveOut: PHWaveOut; uDeviceID: UINT;
  820.   lpFormat: PWaveFormatEx; dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  821. {$EXTERNALSYM waveOutClose}
  822. function waveOutClose(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  823. {$EXTERNALSYM waveOutPrepareHeader}
  824. function waveOutPrepareHeader(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr;
  825.   uSize: UINT): MMRESULT; stdcall;
  826. {$EXTERNALSYM waveOutUnprepareHeader}
  827. function waveOutUnprepareHeader(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr;
  828.   uSize: UINT): MMRESULT; stdcall;
  829. {$EXTERNALSYM waveOutWrite}
  830. function waveOutWrite(hWaveOut: HWAVEOUT; lpWaveOutHdr: PWaveHdr;
  831.   uSize: UINT): MMRESULT; stdcall;
  832. {$EXTERNALSYM waveOutPause}
  833. function waveOutPause(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  834. {$EXTERNALSYM waveOutRestart}
  835. function waveOutRestart(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  836. {$EXTERNALSYM waveOutReset}
  837. function waveOutReset(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  838. {$EXTERNALSYM waveOutBreakLoop}
  839. function waveOutBreakLoop(hWaveOut: HWAVEOUT): MMRESULT; stdcall;
  840. {$EXTERNALSYM waveOutGetPosition}
  841. function waveOutGetPosition(hWaveOut: HWAVEOUT; lpInfo: PMMTime; uSize: UINT): MMRESULT; stdcall;
  842. {$EXTERNALSYM waveOutGetPitch}
  843. function waveOutGetPitch(hWaveOut: HWAVEOUT; lpdwPitch: PDWORD): MMRESULT; stdcall;
  844. {$EXTERNALSYM waveOutSetPitch}
  845. function waveOutSetPitch(hWaveOut: HWAVEOUT; dwPitch: DWORD): MMRESULT; stdcall;
  846. {$EXTERNALSYM waveOutGetPlaybackRate}
  847. function waveOutGetPlaybackRate(hWaveOut: HWAVEOUT; lpdwRate: PDWORD): MMRESULT; stdcall;
  848. {$EXTERNALSYM waveOutSetPlaybackRate}
  849. function waveOutSetPlaybackRate(hWaveOut: HWAVEOUT; dwRate: DWORD): MMRESULT; stdcall;
  850. {$EXTERNALSYM waveOutGetID}
  851. function waveOutGetID(hWaveOut: HWAVEOUT; lpuDeviceID: PUINT): MMRESULT; stdcall;
  852. {$EXTERNALSYM waveOutMessage}
  853. function waveOutMessage(hWaveOut: HWAVEOUT; uMessage: UINT; dw1, dw2: DWORD): Longint; stdcall;
  854. {$EXTERNALSYM waveInGetNumDevs}
  855. function waveInGetNumDevs: UINT; stdcall;
  856. {$EXTERNALSYM waveInGetDevCapsA}
  857. function waveInGetDevCapsA(hwo: HWAVEOUT; lpCaps: PWaveInCapsA; uSize: UINT): MMRESULT; stdcall;
  858. {$EXTERNALSYM waveInGetDevCapsW}
  859. function waveInGetDevCapsW(hwo: HWAVEOUT; lpCaps: PWaveInCapsW; uSize: UINT): MMRESULT; stdcall;
  860. {$EXTERNALSYM waveInGetDevCaps}
  861. function waveInGetDevCaps(hwo: HWAVEOUT; lpCaps: PWaveInCaps; uSize: UINT): MMRESULT; stdcall;
  862. {$EXTERNALSYM waveInGetErrorTextA}
  863. function waveInGetErrorTextA(mmrError: MMRESULT; lpText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  864. {$EXTERNALSYM waveInGetErrorTextW}
  865. function waveInGetErrorTextW(mmrError: MMRESULT; lpText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  866. {$EXTERNALSYM waveInGetErrorText}
  867. function waveInGetErrorText(mmrError: MMRESULT; lpText: PChar; uSize: UINT): MMRESULT; stdcall;
  868. {$EXTERNALSYM waveInOpen}
  869. function waveInOpen(lphWaveIn: PHWAVEIN; uDeviceID: UINT;
  870.   lpFormatEx: PWaveFormatEx; dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  871. {$EXTERNALSYM waveInClose}
  872. function waveInClose(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  873. {$EXTERNALSYM waveInPrepareHeader}
  874. function waveInPrepareHeader(hWaveIn: HWAVEIN; lpWaveInHdr: PWaveHdr;
  875.   uSize: UINT): MMRESULT; stdcall;
  876. {$EXTERNALSYM waveInUnprepareHeader}
  877. function waveInUnprepareHeader(hWaveIn: HWAVEIN; lpWaveInHdr: PWaveHdr;
  878.   uSize: UINT): MMRESULT; stdcall;
  879. {$EXTERNALSYM waveInAddBuffer}
  880. function waveInAddBuffer(hWaveIn: HWAVEIN; lpWaveInHdr: PWaveHdr;
  881.   uSize: UINT): MMRESULT; stdcall;
  882. {$EXTERNALSYM waveInStart}
  883. function waveInStart(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  884. {$EXTERNALSYM waveInStop}
  885. function waveInStop(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  886. {$EXTERNALSYM waveInReset}
  887. function waveInReset(hWaveIn: HWAVEIN): MMRESULT; stdcall;
  888. {$EXTERNALSYM waveInGetPosition}
  889. function waveInGetPosition(hWaveIn: HWAVEIN; lpInfo: PMMTime;
  890.   uSize: UINT): MMRESULT; stdcall;
  891. {$EXTERNALSYM waveInGetID}
  892. function waveInGetID(hWaveIn: HWAVEIN; lpuDeviceID: PUINT): MMRESULT; stdcall;
  893. {$EXTERNALSYM waveInMessage}
  894. function waveInMessage(hWaveIn: HWAVEIN; uMessage: UINT;
  895.   dw1, dw2: DWORD): MMRESULT; stdcall;
  896.  
  897. {***************************************************************************
  898.  
  899.                             MIDI audio support
  900.  
  901. ***************************************************************************}
  902.  
  903. { MIDI error return values }
  904. const
  905.   {$EXTERNALSYM MIDIERR_UNPREPARED}
  906.   MIDIERR_UNPREPARED    = MIDIERR_BASE + 0;   { header not prepared }
  907.   {$EXTERNALSYM MIDIERR_STILLPLAYING}
  908.   MIDIERR_STILLPLAYING  = MIDIERR_BASE + 1;   { still something playing }
  909.   {$EXTERNALSYM MIDIERR_NOMAP}
  910.   MIDIERR_NOMAP         = MIDIERR_BASE + 2;   { no current map }
  911.   {$EXTERNALSYM MIDIERR_NOTREADY}
  912.   MIDIERR_NOTREADY      = MIDIERR_BASE + 3;   { hardware is still busy }
  913.   {$EXTERNALSYM MIDIERR_NODEVICE}
  914.   MIDIERR_NODEVICE      = MIDIERR_BASE + 4;   { port no longer connected }
  915.   {$EXTERNALSYM MIDIERR_INVALIDSETUP}
  916.   MIDIERR_INVALIDSETUP  = MIDIERR_BASE + 5;   { invalid setup }
  917.   {$EXTERNALSYM MIDIERR_BADOPENMODE}
  918.   MIDIERR_BADOPENMODE   = MIDIERR_BASE + 6;   { operation unsupported w/ open mode }
  919.   {$EXTERNALSYM MIDIERR_DONT_CONTINUE}
  920.   MIDIERR_DONT_CONTINUE = MIDIERR_BASE + 7;   { thru device 'eating' a message }
  921.   {$EXTERNALSYM MIDIERR_LASTERROR}
  922.   MIDIERR_LASTERROR     = MIDIERR_BASE + 5;   { last error in range }
  923.  
  924. { MIDI audio data types }
  925. type
  926.   PHMIDI = ^HMIDI;
  927.   {$EXTERNALSYM HMIDI}
  928.   HMIDI = Integer;
  929.   PHMIDIIN = ^HMIDIIN;
  930.   {$EXTERNALSYM HMIDIIN}
  931.   HMIDIIN = Integer;
  932.   PHMIDIOUT = ^HMIDIOUT;
  933.   {$EXTERNALSYM HMIDIOUT}
  934.   HMIDIOUT = Integer;
  935.   PHMIDISTRM = ^HMIDISTRM;
  936.   {$EXTERNALSYM HMIDISTRM}
  937.   HMIDISTRM = Integer;
  938.  
  939. type
  940.   TFNMidiCallBack = TFNDrvCallBack;
  941.  
  942. const
  943.   {$EXTERNALSYM MIDIPATCHSIZE}
  944.   MIDIPATCHSIZE   = 128;
  945.  
  946. type
  947.   PPatchArray = ^TPatchArray;
  948.   TPatchArray = array[0..MIDIPATCHSIZE-1] of Word;
  949.  
  950.   PKeyArray = ^TKeyArray;
  951.   TKeyArray = array[0..MIDIPATCHSIZE-1] of Word;
  952.  
  953.  
  954. { MIDI callback messages }
  955. const
  956.   {$EXTERNALSYM MIM_OPEN}
  957.   MIM_OPEN        = MM_MIM_OPEN;
  958.   {$EXTERNALSYM MIM_CLOSE}
  959.   MIM_CLOSE       = MM_MIM_CLOSE;
  960.   {$EXTERNALSYM MIM_DATA}
  961.   MIM_DATA        = MM_MIM_DATA;
  962.   {$EXTERNALSYM MIM_LONGDATA}
  963.   MIM_LONGDATA    = MM_MIM_LONGDATA;
  964.   {$EXTERNALSYM MIM_ERROR}
  965.   MIM_ERROR       = MM_MIM_ERROR;
  966.   {$EXTERNALSYM MIM_LONGERROR}
  967.   MIM_LONGERROR   = MM_MIM_LONGERROR;
  968.   {$EXTERNALSYM MOM_OPEN}
  969.   MOM_OPEN        = MM_MOM_OPEN;
  970.   {$EXTERNALSYM MOM_CLOSE}
  971.   MOM_CLOSE       = MM_MOM_CLOSE;
  972.   {$EXTERNALSYM MOM_DONE}
  973.   MOM_DONE        = MM_MOM_DONE;
  974.  
  975.   {$EXTERNALSYM MIM_MOREDATA}
  976.   MIM_MOREDATA    = MM_MIM_MOREDATA;
  977.   {$EXTERNALSYM MOM_POSITIONCB}
  978.   MOM_POSITIONCB  = MM_MOM_POSITIONCB;
  979.  
  980. { device ID for MIDI mapper }
  981.   {$EXTERNALSYM MIDIMAPPER}
  982.   MIDIMAPPER     = UINT(-1);
  983.   {$EXTERNALSYM MIDI_MAPPER}
  984.   MIDI_MAPPER    = UINT(-1);
  985.  
  986. { flags for dwFlags parm of midiInOpen() }
  987.   {$EXTERNALSYM MIDI_IO_STATUS}
  988.   MIDI_IO_STATUS = $00000020;
  989.  
  990. { flags for wFlags parm of midiOutCachePatches(), midiOutCacheDrumPatches() }
  991.   {$EXTERNALSYM MIDI_CACHE_ALL}
  992.   MIDI_CACHE_ALL      = 1;
  993.   {$EXTERNALSYM MIDI_CACHE_BESTFIT}
  994.   MIDI_CACHE_BESTFIT  = 2;
  995.   {$EXTERNALSYM MIDI_CACHE_QUERY}
  996.   MIDI_CACHE_QUERY    = 3;
  997.   {$EXTERNALSYM MIDI_UNCACHE}
  998.   MIDI_UNCACHE        = 4;
  999.  
  1000. { MIDI output device capabilities structure }
  1001. type
  1002.   PMidiOutCapsA = ^TMidiOutCapsA;
  1003.   PMidiOutCapsW = ^TMidiOutCapsW;
  1004.   PMidiOutCaps = PMidiOutCapsA;
  1005.   {$EXTERNALSYM tagMIDIOUTCAPSA}
  1006.   tagMIDIOUTCAPSA = record
  1007.     wMid: Word;                  { manufacturer ID }
  1008.     wPid: Word;                  { product ID }
  1009.     vDriverVersion: MMVERSION;        { version of the driver }
  1010.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  1011.     wTechnology: Word;           { type of device }
  1012.     wVoices: Word;               { # of voices (internal synth only) }
  1013.     wNotes: Word;                { max # of notes (internal synth only) }
  1014.     wChannelMask: Word;          { channels used (internal synth only) }
  1015.     dwSupport: DWORD;            { functionality supported by driver }
  1016.   end;
  1017.   {$EXTERNALSYM tagMIDIOUTCAPSW}
  1018.   tagMIDIOUTCAPSW = record
  1019.     wMid: Word;                  { manufacturer ID }
  1020.     wPid: Word;                  { product ID }
  1021.     vDriverVersion: MMVERSION;        { version of the driver }
  1022.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  1023.     wTechnology: Word;           { type of device }
  1024.     wVoices: Word;               { # of voices (internal synth only) }
  1025.     wNotes: Word;                { max # of notes (internal synth only) }
  1026.     wChannelMask: Word;          { channels used (internal synth only) }
  1027.     dwSupport: DWORD;            { functionality supported by driver }
  1028.   end;
  1029.   {$EXTERNALSYM tagMIDIOUTCAPS}
  1030.   tagMIDIOUTCAPS = tagMIDIOUTCAPSA;
  1031.   TMidiOutCapsA = tagMIDIOUTCAPSA;
  1032.   TMidiOutCapsW = tagMIDIOUTCAPSW;
  1033.   TMidiOutCaps = TMidiOutCapsA;
  1034.   {$EXTERNALSYM MIDIOUTCAPSA}
  1035.   MIDIOUTCAPSA = tagMIDIOUTCAPSA;
  1036.   {$EXTERNALSYM MIDIOUTCAPSW}
  1037.   MIDIOUTCAPSW = tagMIDIOUTCAPSW;
  1038.   {$EXTERNALSYM MIDIOUTCAPS}
  1039.   MIDIOUTCAPS = MIDIOUTCAPSA;
  1040.  
  1041.  
  1042. { flags for wTechnology field of MIDIOUTCAPS structure }
  1043. const
  1044.   {$EXTERNALSYM MOD_MIDIPORT}
  1045.   MOD_MIDIPORT    = 1;  { output port }
  1046.   {$EXTERNALSYM MOD_SYNTH}
  1047.   MOD_SYNTH       = 2;  { generic internal synth }
  1048.   {$EXTERNALSYM MOD_SQSYNTH}
  1049.   MOD_SQSYNTH     = 3;  { square wave internal synth }
  1050.   {$EXTERNALSYM MOD_FMSYNTH}
  1051.   MOD_FMSYNTH     = 4;  { FM internal synth }
  1052.   {$EXTERNALSYM MOD_MAPPER}
  1053.   MOD_MAPPER      = 5;  { MIDI mapper }
  1054.  
  1055. { flags for dwSupport field of MIDIOUTCAPS structure }
  1056. const
  1057.   {$EXTERNALSYM MIDICAPS_VOLUME}
  1058.   MIDICAPS_VOLUME          = $0001;  { supports volume control }
  1059.   {$EXTERNALSYM MIDICAPS_LRVOLUME}
  1060.   MIDICAPS_LRVOLUME        = $0002;  { separate left-right volume control }
  1061.   {$EXTERNALSYM MIDICAPS_CACHE}
  1062.   MIDICAPS_CACHE           = $0004;
  1063.   {$EXTERNALSYM MIDICAPS_STREAM}
  1064.   MIDICAPS_STREAM          = $0008;  { driver supports midiStreamOut directly }
  1065.  
  1066. { MIDI output device capabilities structure }
  1067.  
  1068. type
  1069.   PMidiInCapsA = ^TMidiInCapsA;
  1070.   PMidiInCapsW = ^TMidiInCapsW;
  1071.   PMidiInCaps = PMidiInCapsA;
  1072.   {$EXTERNALSYM tagMIDIINCAPSA}
  1073.   tagMIDIINCAPSA = record
  1074.     wMid: Word;                  { manufacturer ID }
  1075.     wPid: Word;                  { product ID }
  1076.     vDriverVersion: MMVERSION;   { version of the driver }
  1077.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  1078.     dwSupport: DWORD;            { functionality supported by driver }
  1079.   end;
  1080.   {$EXTERNALSYM tagMIDIINCAPSW}
  1081.   tagMIDIINCAPSW = record
  1082.     wMid: Word;                  { manufacturer ID }
  1083.     wPid: Word;                  { product ID }
  1084.     vDriverVersion: MMVERSION;   { version of the driver }
  1085.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  1086.     dwSupport: DWORD;            { functionality supported by driver }
  1087.   end;
  1088.   {$EXTERNALSYM tagMIDIINCAPS}
  1089.   tagMIDIINCAPS = tagMIDIINCAPSA;
  1090.   TMidiInCapsA = tagMIDIINCAPSA;
  1091.   TMidiInCapsW = tagMIDIINCAPSW;
  1092.   TMidiInCaps = TMidiInCapsA;
  1093.   {$EXTERNALSYM MIDIINCAPSA}
  1094.   MIDIINCAPSA = tagMIDIINCAPSA;
  1095.   {$EXTERNALSYM MIDIINCAPSW}
  1096.   MIDIINCAPSW = tagMIDIINCAPSW;
  1097.   {$EXTERNALSYM MIDIINCAPS}
  1098.   MIDIINCAPS = MIDIINCAPSA;
  1099.  
  1100. { MIDI data block header }
  1101. type
  1102.   PMidiHdr = ^TMidiHdr;
  1103.   {$EXTERNALSYM midihdr_tag}
  1104.   midihdr_tag = record
  1105.     lpData: PChar;               { pointer to locked data block }
  1106.     dwBufferLength: DWORD;       { length of data in data block }
  1107.     dwBytesRecorded: DWORD;      { used for input only }
  1108.     dwUser: DWORD;               { for client's use }
  1109.     dwFlags: DWORD;              { assorted flags (see defines) }
  1110.     lpNext: PMidiHdr;            { reserved for driver }
  1111.     reserved: DWORD;             { reserved for driver }
  1112.     dwOffset: DWORD;             { Callback offset into buffer }
  1113.     dwReserved: array[0..7] of DWORD; { Reserved for MMSYSTEM }
  1114.   end;
  1115.   TMidiHdr = midihdr_tag;
  1116.   {$EXTERNALSYM MIDIHDR}
  1117.   MIDIHDR = midihdr_tag;
  1118.  
  1119.   PMidiEvent = ^TMidiEvent;
  1120.   {$EXTERNALSYM midievent_tag}
  1121.   midievent_tag = record
  1122.     dwDeltaTime: DWORD;          { Ticks since last event }
  1123.     dwStreamID: DWORD;           { Reserved; must be zero }
  1124.     dwEvent: DWORD;              { Event type and parameters }
  1125.     dwParms: array[0..0] of DWORD;  { Parameters if this is a long event }
  1126.   end;
  1127.   TMidiEvent = midievent_tag;
  1128.   {$EXTERNALSYM MIDIEVENT}
  1129.   MIDIEVENT = midievent_tag;
  1130.  
  1131.   PMidiStrmBuffVer = ^TMidiStrmBuffVer;
  1132.   {$EXTERNALSYM midistrmbuffver_tag}
  1133.   midistrmbuffver_tag = record
  1134.     dwVersion: DWORD;                  { Stream buffer format version }
  1135.     dwMid: DWORD;                      { Manufacturer ID as defined in MMREG.H }
  1136.     dwOEMVersion: DWORD;               { Manufacturer version for custom ext }
  1137.   end;
  1138.   TMidiStrmBuffVer = midistrmbuffver_tag;
  1139.   {$EXTERNALSYM MIDISTRMBUFFVER}
  1140.   MIDISTRMBUFFVER = midistrmbuffver_tag;
  1141.  
  1142. { flags for dwFlags field of MIDIHDR structure }
  1143. const
  1144.   {$EXTERNALSYM MHDR_DONE}
  1145.   MHDR_DONE       = $00000001;       { done bit }
  1146.   {$EXTERNALSYM MHDR_PREPARED}
  1147.   MHDR_PREPARED   = $00000002;       { set if header prepared }
  1148.   {$EXTERNALSYM MHDR_INQUEUE}
  1149.   MHDR_INQUEUE    = $00000004;       { reserved for driver }
  1150.   {$EXTERNALSYM MHDR_ISSTRM}
  1151.   MHDR_ISSTRM     = $00000008;       { Buffer is stream buffer }
  1152.  
  1153. (* 
  1154.   Type codes which go in the high byte of the event DWORD of a stream buffer 
  1155.  
  1156.   Type codes 00-7F contain parameters within the low 24 bits 
  1157.   Type codes 80-FF contain a length of their parameter in the low 24 
  1158.   bits, followed by their parameter data in the buffer. The event 
  1159.   DWORD contains the exact byte length; the parm data itself must be 
  1160.   padded to be an even multiple of 4 bytes long. 
  1161. *) 
  1162.  
  1163.   {$EXTERNALSYM MEVT_F_SHORT}
  1164.   MEVT_F_SHORT       = $00000000;
  1165.   {$EXTERNALSYM MEVT_F_LONG}
  1166.   MEVT_F_LONG        = $80000000;
  1167.   {$EXTERNALSYM MEVT_F_CALLBACK}
  1168.   MEVT_F_CALLBACK    = $40000000;
  1169.  
  1170.   {$EXTERNALSYM MEVT_SHORTMSG}
  1171.   MEVT_SHORTMSG     = $00;    { parm = shortmsg for midiOutShortMsg }
  1172.   {$EXTERNALSYM MEVT_TEMPO}
  1173.   MEVT_TEMPO        = $01;    { parm = new tempo in microsec/qn     }
  1174.   {$EXTERNALSYM MEVT_NOP}
  1175.   MEVT_NOP          = $02;    { parm = unused; does nothing         }
  1176.  
  1177. { 0x04-0x7F reserved }
  1178.  
  1179.   {$EXTERNALSYM MEVT_LONGMSG}
  1180.   MEVT_LONGMSG      = $80;    { parm = bytes to send verbatim       }
  1181.   {$EXTERNALSYM MEVT_COMMENT}
  1182.   MEVT_COMMENT      = $82;    { parm = comment data                 }
  1183.   {$EXTERNALSYM MEVT_VERSION}
  1184.   MEVT_VERSION      = $84;    { parm = MIDISTRMBUFFVER struct       }
  1185.  
  1186. { 0x81-0xFF reserved }
  1187.  
  1188.   {$EXTERNALSYM MIDISTRM_ERROR}
  1189.   MIDISTRM_ERROR    =  -2;
  1190.  
  1191. { Structures and defines for midiStreamProperty }
  1192.   {$EXTERNALSYM MIDIPROP_SET}
  1193.   MIDIPROP_SET       = $80000000;
  1194.   {$EXTERNALSYM MIDIPROP_GET}
  1195.   MIDIPROP_GET       = $40000000;
  1196.  
  1197. { These are intentionally both non-zero so the app cannot accidentally
  1198.   leave the operation off and happen to appear to work due to default
  1199.   action. }
  1200.   {$EXTERNALSYM MIDIPROP_TIMEDIV}
  1201.   MIDIPROP_TIMEDIV   = $00000001;
  1202.   {$EXTERNALSYM MIDIPROP_TEMPO}
  1203.   MIDIPROP_TEMPO     = $00000002;
  1204.  
  1205. type
  1206.   PMidiPropTimeDiv = ^TMidiPropTimeDiv;
  1207.   {$EXTERNALSYM midiproptimediv_tag}
  1208.   midiproptimediv_tag = record
  1209.     cbStruct: DWORD;
  1210.     dwTimeDiv: DWORD;
  1211.   end;
  1212.   TMidiPropTimeDiv = midiproptimediv_tag;
  1213.   {$EXTERNALSYM MIDIPROPTIMEDIV}
  1214.   MIDIPROPTIMEDIV = midiproptimediv_tag;
  1215.  
  1216.   PMidiPropTempo = ^TMidiPropTempo;
  1217.   {$EXTERNALSYM midiproptempo_tag}
  1218.   midiproptempo_tag = record
  1219.     cbStruct: DWORD;
  1220.     dwTempo: DWORD;
  1221.   end;
  1222.   TMidiPropTempo = midiproptempo_tag;
  1223.   {$EXTERNALSYM MIDIPROPTEMPO}
  1224.   MIDIPROPTEMPO = midiproptempo_tag;
  1225.  
  1226. { MIDI function prototypes }
  1227.  
  1228. {$EXTERNALSYM midiOutGetNumDevs}
  1229. function midiOutGetNumDevs: UINT; stdcall;
  1230. {$EXTERNALSYM midiStreamOpen}
  1231. function midiStreamOpen(phms: PHMIDISTRM; puDeviceID: PUINT; 
  1232.   cMidi, dwCallback, dwInstance, fdwOpen: DWORD): MMRESULT; stdcall
  1233. {$EXTERNALSYM midiStreamClose}
  1234. function midiStreamClose(hms: HMIDISTRM): MMRESULT; stdcall;
  1235. {$EXTERNALSYM midiStreamProperty}
  1236. function midiStreamProperty(hms: HMIDISTRM; lppropdata: PBYTE; dwProperty: DWORD): MMRESULT; stdcall;
  1237. {$EXTERNALSYM midiStreamPosition}
  1238. function midiStreamPosition(hms: HMIDISTRM; lpmmt: PMMTime; cbmmt: UINT): MMRESULT; stdcall;
  1239. {$EXTERNALSYM midiStreamOut}
  1240. function midiStreamOut(hms: HMIDISTRM; pmh: PMidiHdr; cbmh: UINT): MMRESULT; stdcall;
  1241. {$EXTERNALSYM midiStreamPause}
  1242. function midiStreamPause(hms: HMIDISTRM): MMRESULT; stdcall;
  1243. {$EXTERNALSYM midiStreamRestart}
  1244. function midiStreamRestart(hms: HMIDISTRM): MMRESULT; stdcall;
  1245. {$EXTERNALSYM midiStreamStop}
  1246. function midiStreamStop(hms: HMIDISTRM): MMRESULT; stdcall;
  1247. {$EXTERNALSYM midiConnect}
  1248. function midiConnect(hmi: HMIDI; hmo: HMIDIOUT; pReserved: Pointer): MMRESULT; stdcall;
  1249. {$EXTERNALSYM midiDisconnect}
  1250. function midiDisconnect(hmi: HMIDI; hmo: HMIDIOUT; pReserved: Pointer): MMRESULT; stdcall;
  1251. {$EXTERNALSYM midiOutGetDevCapsA}
  1252. function midiOutGetDevCapsA(uDeviceID: UINT; lpCaps: PMidiOutCapsA; uSize: UINT): MMRESULT; stdcall;
  1253. {$EXTERNALSYM midiOutGetDevCapsW}
  1254. function midiOutGetDevCapsW(uDeviceID: UINT; lpCaps: PMidiOutCapsW; uSize: UINT): MMRESULT; stdcall;
  1255. {$EXTERNALSYM midiOutGetDevCaps}
  1256. function midiOutGetDevCaps(uDeviceID: UINT; lpCaps: PMidiOutCaps; uSize: UINT): MMRESULT; stdcall;
  1257. {$EXTERNALSYM midiOutGetVolume}
  1258. function midiOutGetVolume(hmo: HMIDIOUT; lpdwVolume: PDWORD): MMRESULT; stdcall;
  1259. {$EXTERNALSYM midiOutSetVolume}
  1260. function midiOutSetVolume(hmo: HMIDIOUT; dwVolume: DWORD): MMRESULT; stdcall;
  1261. {$EXTERNALSYM midiOutGetErrorTextA}
  1262. function midiOutGetErrorTextA(mmrError: MMRESULT; pszText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  1263. {$EXTERNALSYM midiOutGetErrorTextW}
  1264. function midiOutGetErrorTextW(mmrError: MMRESULT; pszText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  1265. {$EXTERNALSYM midiOutGetErrorText}
  1266. function midiOutGetErrorText(mmrError: MMRESULT; pszText: PChar; uSize: UINT): MMRESULT; stdcall;
  1267. {$EXTERNALSYM midiOutOpen}
  1268. function midiOutOpen(lphMidiOut: PHMIDIOUT; uDeviceID: UINT;
  1269.   dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  1270. {$EXTERNALSYM midiOutClose}
  1271. function midiOutClose(hMidiOut: HMIDIOUT): MMRESULT; stdcall;
  1272. {$EXTERNALSYM midiOutPrepareHeader}
  1273. function midiOutPrepareHeader(hMidiOut: HMIDIOUT; lpMidiOutHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1274. {$EXTERNALSYM midiOutUnprepareHeader}
  1275. function midiOutUnprepareHeader(hMidiOut: HMIDIOUT; lpMidiOutHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1276. {$EXTERNALSYM midiOutShortMsg}
  1277. function midiOutShortMsg(hMidiOut: HMIDIOUT; dwMsg: DWORD): MMRESULT; stdcall;
  1278. {$EXTERNALSYM midiOutLongMsg}
  1279. function midiOutLongMsg(hMidiOut: HMIDIOUT; lpMidiOutHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1280. {$EXTERNALSYM midiOutReset}
  1281. function midiOutReset(hMidiOut: HMIDIOUT): MMRESULT; stdcall;
  1282. {$EXTERNALSYM midiOutCachePatches}
  1283. function midiOutCachePatches(hMidiOut: HMIDIOUT;
  1284.   uBank: UINT; lpwPatchArray: PWord; uFlags: UINT): MMRESULT; stdcall;
  1285. {$EXTERNALSYM midiOutCacheDrumPatches}
  1286. function midiOutCacheDrumPatches(hMidiOut: HMIDIOUT;
  1287.   uPatch: UINT; lpwKeyArray: PWord; uFlags: UINT): MMRESULT; stdcall;
  1288. {$EXTERNALSYM midiOutGetID}
  1289. function midiOutGetID(hMidiOut: HMIDIOUT; lpuDeviceID: PUINT): MMRESULT; stdcall;
  1290. {$EXTERNALSYM midiOutMessage}
  1291. function midiOutMessage(hMidiOut: HMIDIOUT; uMessage: UINT; dw1, dw2: DWORD): MMRESULT; stdcall;
  1292. {$EXTERNALSYM midiInGetNumDevs}
  1293. function midiInGetNumDevs: UINT; stdcall;
  1294. {$EXTERNALSYM midiInGetDevCapsA}
  1295. function midiInGetDevCapsA(DeviceID: UINT; lpCaps: PMidiInCapsA; uSize: UINT): MMRESULT; stdcall;
  1296. {$EXTERNALSYM midiInGetDevCapsW}
  1297. function midiInGetDevCapsW(DeviceID: UINT; lpCaps: PMidiInCapsW; uSize: UINT): MMRESULT; stdcall;
  1298. {$EXTERNALSYM midiInGetDevCaps}
  1299. function midiInGetDevCaps(DeviceID: UINT; lpCaps: PMidiInCaps; uSize: UINT): MMRESULT; stdcall;
  1300. {$EXTERNALSYM midiInGetErrorTextA}
  1301. function midiInGetErrorTextA(mmrError: MMRESULT; pszText: PAnsiChar; uSize: UINT): MMRESULT; stdcall;
  1302. {$EXTERNALSYM midiInGetErrorTextW}
  1303. function midiInGetErrorTextW(mmrError: MMRESULT; pszText: PWideChar; uSize: UINT): MMRESULT; stdcall;
  1304. {$EXTERNALSYM midiInGetErrorText}
  1305. function midiInGetErrorText(mmrError: MMRESULT; pszText: PChar; uSize: UINT): MMRESULT; stdcall;
  1306. {$EXTERNALSYM midiInOpen}
  1307. function midiInOpen(lphMidiIn: PHMIDIIN; uDeviceID: UINT;
  1308.   dwCallback, dwInstance, dwFlags: DWORD): MMRESULT; stdcall;
  1309. {$EXTERNALSYM midiInClose}
  1310. function midiInClose(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1311. {$EXTERNALSYM midiInPrepareHeader}
  1312. function midiInPrepareHeader(hMidiIn: HMIDIIN; lpMidiInHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1313. {$EXTERNALSYM midiInUnprepareHeader}
  1314. function midiInUnprepareHeader(hMidiIn: HMIDIIN; lpMidiInHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1315. {$EXTERNALSYM midiInAddBuffer}
  1316. function midiInAddBuffer(hMidiIn: HMIDIIN; lpMidiInHdr: PMidiHdr; uSize: UINT): MMRESULT; stdcall;
  1317. {$EXTERNALSYM midiInStart}
  1318. function midiInStart(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1319. {$EXTERNALSYM midiInStop}
  1320. function midiInStop(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1321. {$EXTERNALSYM midiInReset}
  1322. function midiInReset(hMidiIn: HMIDIIN): MMRESULT; stdcall;
  1323. {$EXTERNALSYM midiInGetID}
  1324. function midiInGetID(hMidiIn: HMIDIIN; lpuDeviceID: PUINT): MMRESULT; stdcall;
  1325. {$EXTERNALSYM midiInMessage}
  1326. function midiInMessage(hMidiIn: HMIDIIN; uMessage: UINT; dw1, dw2: DWORD): MMRESULT; stdcall;
  1327.  
  1328.  
  1329. {***************************************************************************
  1330.  
  1331.                         Auxiliary audio support
  1332.  
  1333. ***************************************************************************}
  1334.  
  1335. { device ID for aux device mapper }
  1336. const
  1337.   {$EXTERNALSYM AUX_MAPPER}
  1338.   AUX_MAPPER     = UINT(-1);
  1339.  
  1340. { Auxiliary audio device capabilities structure }
  1341. type
  1342.   PAuxCapsA = ^TAuxCapsA;
  1343.   PAuxCapsW = ^TAuxCapsW;
  1344.   PAuxCaps = PAuxCapsA;
  1345.   {$EXTERNALSYM tagAUXCAPSA}
  1346.   tagAUXCAPSA = record
  1347.     wMid: Word;                  { manufacturer ID }
  1348.     wPid: Word;                  { product ID }
  1349.     vDriverVersion: MMVERSION;        { version of the driver }
  1350.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  1351.     wTechnology: Word;           { type of device }
  1352.     dwSupport: DWORD;            { functionality supported by driver }
  1353.   end;
  1354.   {$EXTERNALSYM tagAUXCAPSW}
  1355.   tagAUXCAPSW = record
  1356.     wMid: Word;                  { manufacturer ID }
  1357.     wPid: Word;                  { product ID }
  1358.     vDriverVersion: MMVERSION;        { version of the driver }
  1359.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  1360.     wTechnology: Word;           { type of device }
  1361.     dwSupport: DWORD;            { functionality supported by driver }
  1362.   end;
  1363.   {$EXTERNALSYM tagAUXCAPS}
  1364.   tagAUXCAPS = tagAUXCAPSA;
  1365.   TAuxCapsA = tagAUXCAPSA;
  1366.   TAuxCapsW = tagAUXCAPSW;
  1367.   TAuxCaps = TAuxCapsA;
  1368.   {$EXTERNALSYM AUXCAPSA}
  1369.   AUXCAPSA = tagAUXCAPSA;
  1370.   {$EXTERNALSYM AUXCAPSW}
  1371.   AUXCAPSW = tagAUXCAPSW;
  1372.   {$EXTERNALSYM AUXCAPS}
  1373.   AUXCAPS = AUXCAPSA;
  1374.  
  1375. { flags for wTechnology field in AUXCAPS structure }
  1376. const
  1377.   {$EXTERNALSYM AUXCAPS_CDAUDIO}
  1378.   AUXCAPS_CDAUDIO    = 1;       { audio from internal CD-ROM drive }
  1379.   {$EXTERNALSYM AUXCAPS_AUXIN}
  1380.   AUXCAPS_AUXIN      = 2;       { audio from auxiliary input jacks }
  1381.  
  1382. { flags for dwSupport field in AUXCAPS structure }
  1383. const
  1384.   {$EXTERNALSYM AUXCAPS_VOLUME}
  1385.   AUXCAPS_VOLUME     = $0001;  { supports volume control }
  1386.   {$EXTERNALSYM AUXCAPS_LRVOLUME}
  1387.   AUXCAPS_LRVOLUME   = $0002;  { separate left-right volume control }
  1388.  
  1389. { auxiliary audio function prototypes }
  1390. {$EXTERNALSYM auxGetNumDevs}
  1391. function auxGetNumDevs: UINT; stdcall;
  1392. {$EXTERNALSYM auxGetDevCapsA}
  1393. function auxGetDevCapsA(uDeviceID: UINT; lpCaps: PAuxCapsA; uSize: UINT): MMRESULT; stdcall;
  1394. {$EXTERNALSYM auxGetDevCapsW}
  1395. function auxGetDevCapsW(uDeviceID: UINT; lpCaps: PAuxCapsW; uSize: UINT): MMRESULT; stdcall;
  1396. {$EXTERNALSYM auxGetDevCaps}
  1397. function auxGetDevCaps(uDeviceID: UINT; lpCaps: PAuxCaps; uSize: UINT): MMRESULT; stdcall;
  1398. {$EXTERNALSYM auxSetVolume}
  1399. function auxSetVolume(uDeviceID: UINT; dwVolume: DWORD): MMRESULT; stdcall;
  1400. {$EXTERNALSYM auxGetVolume}
  1401. function auxGetVolume(uDeviceID: UINT; lpdwVolume: PDWORD): MMRESULT; stdcall;
  1402. {$EXTERNALSYM auxOutMessage}
  1403. function auxOutMessage(uDeviceID, uMessage: UINT; dw1, dw2: DWORD): MMRESULT; stdcall;
  1404.  
  1405.  
  1406. {****************************************************************************
  1407.  
  1408.                 Mixer Support
  1409.  
  1410. ****************************************************************************}
  1411.  
  1412. type
  1413.   PHMIXEROBJ = ^HMIXEROBJ;
  1414.   {$EXTERNALSYM HMIXEROBJ}
  1415.   HMIXEROBJ = Integer;
  1416.  
  1417.   PHMIXER = ^HMIXER;
  1418.   {$EXTERNALSYM HMIXER}
  1419.   HMIXER = Integer;
  1420.  
  1421. const
  1422.   {$EXTERNALSYM MIXER_SHORT_NAME_CHARS}
  1423.   MIXER_SHORT_NAME_CHARS   = 16;
  1424.   {$EXTERNALSYM MIXER_LONG_NAME_CHARS}
  1425.   MIXER_LONG_NAME_CHARS    = 64;
  1426.  
  1427. { MMRESULT error return values specific to the mixer API }
  1428.  
  1429.   {$EXTERNALSYM MIXERR_INVALLINE}
  1430.   MIXERR_INVALLINE            = (MIXERR_BASE + 0);
  1431.   {$EXTERNALSYM MIXERR_INVALCONTROL}
  1432.   MIXERR_INVALCONTROL         = (MIXERR_BASE + 1);
  1433.   {$EXTERNALSYM MIXERR_INVALVALUE}
  1434.   MIXERR_INVALVALUE           = (MIXERR_BASE + 2);
  1435.   {$EXTERNALSYM MIXERR_LASTERROR}
  1436.   MIXERR_LASTERROR            = (MIXERR_BASE + 2);
  1437.  
  1438.   {$EXTERNALSYM MIXER_OBJECTF_HANDLE}
  1439.   MIXER_OBJECTF_HANDLE    = $80000000;
  1440.   {$EXTERNALSYM MIXER_OBJECTF_MIXER}
  1441.   MIXER_OBJECTF_MIXER     = $00000000;
  1442.   {$EXTERNALSYM MIXER_OBJECTF_HMIXER}
  1443.   MIXER_OBJECTF_HMIXER    = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_MIXER);
  1444.   {$EXTERNALSYM MIXER_OBJECTF_WAVEOUT}
  1445.   MIXER_OBJECTF_WAVEOUT   = $10000000;
  1446.   {$EXTERNALSYM MIXER_OBJECTF_HWAVEOUT}
  1447.   MIXER_OBJECTF_HWAVEOUT  = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_WAVEOUT);
  1448.   {$EXTERNALSYM MIXER_OBJECTF_WAVEIN}
  1449.   MIXER_OBJECTF_WAVEIN    = $20000000;
  1450.   {$EXTERNALSYM MIXER_OBJECTF_HWAVEIN}
  1451.   MIXER_OBJECTF_HWAVEIN   = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_WAVEIN);
  1452.   {$EXTERNALSYM MIXER_OBJECTF_MIDIOUT}
  1453.   MIXER_OBJECTF_MIDIOUT   = $30000000;
  1454.   {$EXTERNALSYM MIXER_OBJECTF_HMIDIOUT}
  1455.   MIXER_OBJECTF_HMIDIOUT  = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_MIDIOUT);
  1456.   {$EXTERNALSYM MIXER_OBJECTF_MIDIIN}
  1457.   MIXER_OBJECTF_MIDIIN    = $40000000;
  1458.   {$EXTERNALSYM MIXER_OBJECTF_HMIDIIN}
  1459.   MIXER_OBJECTF_HMIDIIN   = (MIXER_OBJECTF_HANDLE or MIXER_OBJECTF_MIDIIN);
  1460.   {$EXTERNALSYM MIXER_OBJECTF_AUX}
  1461.   MIXER_OBJECTF_AUX       = $50000000;
  1462.  
  1463. {$EXTERNALSYM mixerGetNumDevs}
  1464. function mixerGetNumDevs: UINT; stdcall;
  1465.  
  1466. type
  1467.   PMixerCapsA = ^TMixerCapsA;
  1468.   PMixerCapsW = ^TMixerCapsW;
  1469.   PMixerCaps = PMixerCapsA;
  1470.   {$EXTERNALSYM tagMIXERCAPSA}
  1471.   tagMIXERCAPSA = record
  1472.     wMid: WORD;                    { manufacturer id }
  1473.     wPid: WORD;                    { product id }
  1474.     vDriverVersion: MMVERSION;     { version of the driver }
  1475.     szPname: array [0..MAXPNAMELEN - 1] of AnsiChar;   { product name }
  1476.     fdwSupport: DWORD;             { misc. support bits }
  1477.     cDestinations: DWORD;          { count of destinations }
  1478.   end;
  1479.   {$EXTERNALSYM tagMIXERCAPSW}
  1480.   tagMIXERCAPSW = record
  1481.     wMid: WORD;                    { manufacturer id }
  1482.     wPid: WORD;                    { product id }
  1483.     vDriverVersion: MMVERSION;     { version of the driver }
  1484.     szPname: array [0..MAXPNAMELEN - 1] of WideChar;   { product name }
  1485.     fdwSupport: DWORD;             { misc. support bits }
  1486.     cDestinations: DWORD;          { count of destinations }
  1487.   end;
  1488.   {$EXTERNALSYM tagMIXERCAPS}
  1489.   tagMIXERCAPS = tagMIXERCAPSA;
  1490.   TMixerCapsA = tagMIXERCAPSA;
  1491.   TMixerCapsW = tagMIXERCAPSW;
  1492.   TMixerCaps = TMixerCapsA;
  1493.   {$EXTERNALSYM MIXERCAPSA}
  1494.   MIXERCAPSA = tagMIXERCAPSA;
  1495.   {$EXTERNALSYM MIXERCAPSW}
  1496.   MIXERCAPSW = tagMIXERCAPSW;
  1497.   {$EXTERNALSYM MIXERCAPS}
  1498.   MIXERCAPS = MIXERCAPSA;
  1499.  
  1500. {$EXTERNALSYM mixerGetDevCapsA}
  1501. function mixerGetDevCapsA(uMxId: UINT; pmxcaps: PMixerCapsA; cbmxcaps: UINT): MMRESULT; stdcall;
  1502. {$EXTERNALSYM mixerGetDevCapsW}
  1503. function mixerGetDevCapsW(uMxId: UINT; pmxcaps: PMixerCapsW; cbmxcaps: UINT): MMRESULT; stdcall;
  1504. {$EXTERNALSYM mixerGetDevCaps}
  1505. function mixerGetDevCaps(uMxId: UINT; pmxcaps: PMixerCaps; cbmxcaps: UINT): MMRESULT; stdcall;
  1506. {$EXTERNALSYM mixerOpen}
  1507. function mixerOpen(phmx: PHMIXER; uMxId: UINT; dwCallback, dwInstance, fdwOpen: DWORD): MMRESULT; stdcall;
  1508. {$EXTERNALSYM mixerClose}
  1509. function mixerClose(hmx: HMIXER): MMRESULT; stdcall;
  1510. function mixerMessage(hmx: HMIXER; uMsg: UINT; dwParam1, dwParam2: DWORD): DWORD; stdcall;
  1511.  
  1512. type
  1513.   PMixerLineA = ^TMixerLineA;
  1514.   PMixerLineW = ^TMixerLineW;
  1515.   PMixerLine = PMixerLineA;
  1516.   {$EXTERNALSYM tagMIXERLINEA}
  1517.   tagMIXERLINEA = record
  1518.     cbStruct: DWORD;               { size of MIXERLINE structure }
  1519.     dwDestination: DWORD;          { zero based destination index }
  1520.     dwSource: DWORD;               { zero based source index (if source) }
  1521.     dwLineID: DWORD;               { unique line id for mixer device }
  1522.     fdwLine: DWORD;                { state/information about line }
  1523.     dwUser: DWORD;                 { driver specific information }
  1524.     dwComponentType: DWORD;        { component type line connects to }
  1525.     cChannels: DWORD;              { number of channels line supports }
  1526.     cConnections: DWORD;           { number of connections [possible] }
  1527.     cControls: DWORD;              { number of controls at this line }
  1528.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of AnsiChar;
  1529.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of AnsiChar;
  1530.     Target: record
  1531.       dwType: DWORD;                 { MIXERLINE_TARGETTYPE_xxxx }
  1532.       dwDeviceID: DWORD;             { target device ID of device type }
  1533.       wMid: WORD;                                   { of target device }
  1534.       wPid: WORD;                                   {      " }
  1535.       vDriverVersion: MMVERSION;                    {      " }
  1536.       szPname: array[0..MAXPNAMELEN - 1] of AnsiChar;  {      " }
  1537.      end;
  1538.   end;
  1539.   {$EXTERNALSYM tagMIXERLINEW}
  1540.   tagMIXERLINEW = record
  1541.     cbStruct: DWORD;               { size of MIXERLINE structure }
  1542.     dwDestination: DWORD;          { zero based destination index }
  1543.     dwSource: DWORD;               { zero based source index (if source) }
  1544.     dwLineID: DWORD;               { unique line id for mixer device }
  1545.     fdwLine: DWORD;                { state/information about line }
  1546.     dwUser: DWORD;                 { driver specific information }
  1547.     dwComponentType: DWORD;        { component type line connects to }
  1548.     cChannels: DWORD;              { number of channels line supports }
  1549.     cConnections: DWORD;           { number of connections [possible] }
  1550.     cControls: DWORD;              { number of controls at this line }
  1551.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of WideChar;
  1552.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of WideChar;
  1553.     Target: record
  1554.       dwType: DWORD;                 { MIXERLINE_TARGETTYPE_xxxx }
  1555.       dwDeviceID: DWORD;             { target device ID of device type }
  1556.       wMid: WORD;                                   { of target device }
  1557.       wPid: WORD;                                   {      " }
  1558.       vDriverVersion: MMVERSION;                    {      " }
  1559.       szPname: array[0..MAXPNAMELEN - 1] of WideChar;  {      " }
  1560.      end;
  1561.   end;
  1562.   {$EXTERNALSYM tagMIXERLINE}
  1563.   tagMIXERLINE = tagMIXERLINEA;
  1564.   TMixerLineA = tagMIXERLINEA;
  1565.   TMixerLineW = tagMIXERLINEW;
  1566.   TMixerLine = TMixerLineA;
  1567.   {$EXTERNALSYM MIXERLINEA}
  1568.   MIXERLINEA = tagMIXERLINEA;
  1569.   {$EXTERNALSYM MIXERLINEW}
  1570.   MIXERLINEW = tagMIXERLINEW;
  1571.   {$EXTERNALSYM MIXERLINE}
  1572.   MIXERLINE = MIXERLINEA;
  1573.  
  1574. const
  1575. { TMixerLine.fdwLine }
  1576.  
  1577.   {$EXTERNALSYM MIXERLINE_LINEF_ACTIVE}
  1578.   MIXERLINE_LINEF_ACTIVE              = $00000001;
  1579.   {$EXTERNALSYM MIXERLINE_LINEF_DISCONNECTED}
  1580.   MIXERLINE_LINEF_DISCONNECTED        = $00008000;
  1581.   {$EXTERNALSYM MIXERLINE_LINEF_SOURCE}
  1582.   MIXERLINE_LINEF_SOURCE              = $80000000;
  1583.  
  1584. { TMixerLine.dwComponentType
  1585.   component types for destinations and sources }
  1586.  
  1587.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_FIRST}
  1588.   MIXERLINE_COMPONENTTYPE_DST_FIRST       = $00000000;
  1589.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_UNDEFINED}
  1590.   MIXERLINE_COMPONENTTYPE_DST_UNDEFINED   = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 0);
  1591.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_DIGITAL}
  1592.   MIXERLINE_COMPONENTTYPE_DST_DIGITAL     = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 1);
  1593.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_LINE}
  1594.   MIXERLINE_COMPONENTTYPE_DST_LINE        = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 2);
  1595.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_MONITOR}
  1596.   MIXERLINE_COMPONENTTYPE_DST_MONITOR     = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 3);
  1597.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_SPEAKERS}
  1598.   MIXERLINE_COMPONENTTYPE_DST_SPEAKERS    = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4);
  1599.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_HEADPHONES}
  1600.   MIXERLINE_COMPONENTTYPE_DST_HEADPHONES  = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 5);
  1601.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_TELEPHONE}
  1602.   MIXERLINE_COMPONENTTYPE_DST_TELEPHONE   = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 6);
  1603.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_WAVEIN}
  1604.   MIXERLINE_COMPONENTTYPE_DST_WAVEIN      = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 7);
  1605.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_VOICEIN}
  1606.   MIXERLINE_COMPONENTTYPE_DST_VOICEIN     = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8);
  1607.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_DST_LAST}
  1608.   MIXERLINE_COMPONENTTYPE_DST_LAST        = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 8);
  1609.  
  1610.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_FIRST}
  1611.   MIXERLINE_COMPONENTTYPE_SRC_FIRST       = $00001000;
  1612.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED}
  1613.   MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 0);
  1614.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_DIGITAL}
  1615.   MIXERLINE_COMPONENTTYPE_SRC_DIGITAL     = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 1);
  1616.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_LINE}
  1617.   MIXERLINE_COMPONENTTYPE_SRC_LINE        = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2);
  1618.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE}
  1619.   MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE  = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3);
  1620.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER}
  1621.   MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 4);
  1622.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC}
  1623.   MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 5);
  1624.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE}
  1625.   MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 6);
  1626.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER}
  1627.   MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 7);
  1628.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT}
  1629.   MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT     = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 8);
  1630.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY}
  1631.   MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY   = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 9);
  1632.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_ANALOG}
  1633.   MIXERLINE_COMPONENTTYPE_SRC_ANALOG      = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10);
  1634.   {$EXTERNALSYM MIXERLINE_COMPONENTTYPE_SRC_LAST}
  1635.   MIXERLINE_COMPONENTTYPE_SRC_LAST        = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 10);
  1636.  
  1637. { TMixerLine.Target.dwType }
  1638.  
  1639.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_UNDEFINED}
  1640.   MIXERLINE_TARGETTYPE_UNDEFINED      = 0;
  1641.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_WAVEOUT}
  1642.   MIXERLINE_TARGETTYPE_WAVEOUT        = 1;
  1643.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_WAVEIN}
  1644.   MIXERLINE_TARGETTYPE_WAVEIN         = 2;
  1645.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_MIDIOUT}
  1646.   MIXERLINE_TARGETTYPE_MIDIOUT        = 3;
  1647.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_MIDIIN}
  1648.   MIXERLINE_TARGETTYPE_MIDIIN         = 4;
  1649.   {$EXTERNALSYM MIXERLINE_TARGETTYPE_AUX}
  1650.   MIXERLINE_TARGETTYPE_AUX            = 5;
  1651.  
  1652. {$EXTERNALSYM mixerGetLineInfoA}
  1653. function mixerGetLineInfoA(hmxobj: HMIXEROBJ; pmxl: PMixerLineA; 
  1654.   fdwInfo: DWORD): MMRESULT; stdcall;
  1655. {$EXTERNALSYM mixerGetLineInfoW}
  1656. function mixerGetLineInfoW(hmxobj: HMIXEROBJ; pmxl: PMixerLineW; 
  1657.   fdwInfo: DWORD): MMRESULT; stdcall;
  1658. {$EXTERNALSYM mixerGetLineInfo}
  1659. function mixerGetLineInfo(hmxobj: HMIXEROBJ; pmxl: PMixerLine; 
  1660.   fdwInfo: DWORD): MMRESULT; stdcall;
  1661.  
  1662. const
  1663.   {$EXTERNALSYM MIXER_GETLINEINFOF_DESTINATION}
  1664.   MIXER_GETLINEINFOF_DESTINATION      = $00000000;
  1665.   {$EXTERNALSYM MIXER_GETLINEINFOF_SOURCE}
  1666.   MIXER_GETLINEINFOF_SOURCE           = $00000001;
  1667.   {$EXTERNALSYM MIXER_GETLINEINFOF_LINEID}
  1668.   MIXER_GETLINEINFOF_LINEID           = $00000002;
  1669.   {$EXTERNALSYM MIXER_GETLINEINFOF_COMPONENTTYPE}
  1670.   MIXER_GETLINEINFOF_COMPONENTTYPE    = $00000003;
  1671.   {$EXTERNALSYM MIXER_GETLINEINFOF_TARGETTYPE}
  1672.   MIXER_GETLINEINFOF_TARGETTYPE       = $00000004;
  1673.  
  1674.   {$EXTERNALSYM MIXER_GETLINEINFOF_QUERYMASK}
  1675.   MIXER_GETLINEINFOF_QUERYMASK        = $0000000F;
  1676.  
  1677. {$EXTERNALSYM mixerGetID}
  1678. function mixerGetID(hmxobj: HMIXEROBJ; var puMxId: UINT; fdwId: DWORD): MMRESULT; stdcall;
  1679.  
  1680. type
  1681.   PMixerControlA = ^TMixerControlA;
  1682.   PMixerControlW = ^TMixerControlW;
  1683.   PMixerControl = PMixerControlA;
  1684.   {$EXTERNALSYM tagMIXERCONTROLA}
  1685.   tagMIXERCONTROLA = packed record
  1686.     cbStruct: DWORD;           { size in bytes of MIXERCONTROL }
  1687.     dwControlID: DWORD;        { unique control id for mixer device }
  1688.     dwControlType: DWORD;      { MIXERCONTROL_CONTROLTYPE_xxx }
  1689.     fdwControl: DWORD;         { MIXERCONTROL_CONTROLF_xxx }
  1690.     cMultipleItems: DWORD;     { if MIXERCONTROL_CONTROLF_MULTIPLE set }
  1691.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of AnsiChar;
  1692.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of AnsiChar;
  1693.     Bounds: record
  1694.       case Integer of
  1695.         0: (lMinimum, lMaximum: Longint);
  1696.         1: (dwMinimum, dwMaximum: DWORD);
  1697.         2: (dwReserved: array[0..5] of DWORD);
  1698.     end;
  1699.     Metrics: record
  1700.       case Integer of
  1701.         0: (cSteps: DWORD);        { # of steps between min & max }
  1702.         1: (cbCustomData: DWORD);  { size in bytes of custom data }
  1703.         2: (dwReserved: array[0..5] of DWORD);
  1704.     end;
  1705.   end;  
  1706.   {$EXTERNALSYM tagMIXERCONTROLW}
  1707.   tagMIXERCONTROLW = packed record
  1708.     cbStruct: DWORD;           { size in bytes of MIXERCONTROL }
  1709.     dwControlID: DWORD;        { unique control id for mixer device }
  1710.     dwControlType: DWORD;      { MIXERCONTROL_CONTROLTYPE_xxx }
  1711.     fdwControl: DWORD;         { MIXERCONTROL_CONTROLF_xxx }
  1712.     cMultipleItems: DWORD;     { if MIXERCONTROL_CONTROLF_MULTIPLE set }
  1713.     szShortName: array[0..MIXER_SHORT_NAME_CHARS - 1] of WideChar;
  1714.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of WideChar;
  1715.     Bounds: record
  1716.       case Integer of
  1717.         0: (lMinimum, lMaximum: Longint);
  1718.         1: (dwMinimum, dwMaximum: DWORD);
  1719.         2: (dwReserved: array[0..5] of DWORD);
  1720.     end;
  1721.     Metrics: record
  1722.       case Integer of
  1723.         0: (cSteps: DWORD);        { # of steps between min & max }
  1724.         1: (cbCustomData: DWORD);  { size in bytes of custom data }
  1725.         2: (dwReserved: array[0..5] of DWORD);
  1726.     end;
  1727.   end;  
  1728.   {$EXTERNALSYM tagMIXERCONTROL}
  1729.   tagMIXERCONTROL = tagMIXERCONTROLA;
  1730.   TMixerControlA = tagMIXERCONTROLA;
  1731.   TMixerControlW = tagMIXERCONTROLW;
  1732.   TMixerControl = TMixerControlA;
  1733.   {$EXTERNALSYM MIXERCONTROLA}
  1734.   MIXERCONTROLA = tagMIXERCONTROLA;
  1735.   {$EXTERNALSYM MIXERCONTROLW}
  1736.   MIXERCONTROLW = tagMIXERCONTROLW;
  1737.   {$EXTERNALSYM MIXERCONTROL}
  1738.   MIXERCONTROL = MIXERCONTROLA;
  1739.  
  1740. const
  1741. { TMixerControl.fdwControl }
  1742.  
  1743.   {$EXTERNALSYM MIXERCONTROL_CONTROLF_UNIFORM}
  1744.   MIXERCONTROL_CONTROLF_UNIFORM   = $00000001;
  1745.   {$EXTERNALSYM MIXERCONTROL_CONTROLF_MULTIPLE}
  1746.   MIXERCONTROL_CONTROLF_MULTIPLE  = $00000002;
  1747.   {$EXTERNALSYM MIXERCONTROL_CONTROLF_DISABLED}
  1748.   MIXERCONTROL_CONTROLF_DISABLED  = $80000000;
  1749.  
  1750. { MIXERCONTROL_CONTROLTYPE_xxx building block defines }
  1751.  
  1752.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_MASK}
  1753.   MIXERCONTROL_CT_CLASS_MASK          = $F0000000;
  1754.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_CUSTOM}
  1755.   MIXERCONTROL_CT_CLASS_CUSTOM        = $00000000;
  1756.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_METER}
  1757.   MIXERCONTROL_CT_CLASS_METER         = $10000000;
  1758.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_SWITCH}
  1759.   MIXERCONTROL_CT_CLASS_SWITCH        = $20000000;
  1760.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_NUMBER}
  1761.   MIXERCONTROL_CT_CLASS_NUMBER        = $30000000;
  1762.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_SLIDER}
  1763.   MIXERCONTROL_CT_CLASS_SLIDER        = $40000000;
  1764.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_FADER}
  1765.   MIXERCONTROL_CT_CLASS_FADER         = $50000000;
  1766.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_TIME}
  1767.   MIXERCONTROL_CT_CLASS_TIME          = $60000000;
  1768.   {$EXTERNALSYM MIXERCONTROL_CT_CLASS_LIST}
  1769.   MIXERCONTROL_CT_CLASS_LIST          = $70000000;
  1770.  
  1771.   {$EXTERNALSYM MIXERCONTROL_CT_SUBCLASS_MASK}
  1772.   MIXERCONTROL_CT_SUBCLASS_MASK       = $0F000000;
  1773.  
  1774.   {$EXTERNALSYM MIXERCONTROL_CT_SC_SWITCH_BOOLEAN}
  1775.   MIXERCONTROL_CT_SC_SWITCH_BOOLEAN   = $00000000;
  1776.   {$EXTERNALSYM MIXERCONTROL_CT_SC_SWITCH_BUTTON}
  1777.   MIXERCONTROL_CT_SC_SWITCH_BUTTON    = $01000000;
  1778.  
  1779.   {$EXTERNALSYM MIXERCONTROL_CT_SC_METER_POLLED}
  1780.   MIXERCONTROL_CT_SC_METER_POLLED     = $00000000;
  1781.  
  1782.   {$EXTERNALSYM MIXERCONTROL_CT_SC_TIME_MICROSECS}
  1783.   MIXERCONTROL_CT_SC_TIME_MICROSECS   = $00000000;
  1784.   {$EXTERNALSYM MIXERCONTROL_CT_SC_TIME_MILLISECS}
  1785.   MIXERCONTROL_CT_SC_TIME_MILLISECS   = $01000000;
  1786.  
  1787.   {$EXTERNALSYM MIXERCONTROL_CT_SC_LIST_SINGLE}
  1788.   MIXERCONTROL_CT_SC_LIST_SINGLE      = $00000000;
  1789.   {$EXTERNALSYM MIXERCONTROL_CT_SC_LIST_MULTIPLE}
  1790.   MIXERCONTROL_CT_SC_LIST_MULTIPLE    = $01000000;
  1791.  
  1792.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_MASK}
  1793.   MIXERCONTROL_CT_UNITS_MASK          = $00FF0000;
  1794.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_CUSTOM}
  1795.   MIXERCONTROL_CT_UNITS_CUSTOM        = $00000000;
  1796.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_BOOLEAN}
  1797.   MIXERCONTROL_CT_UNITS_BOOLEAN       = $00010000;
  1798.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_SIGNED}
  1799.   MIXERCONTROL_CT_UNITS_SIGNED        = $00020000;
  1800.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_UNSIGNED}
  1801.   MIXERCONTROL_CT_UNITS_UNSIGNED      = $00030000;
  1802.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_DECIBELS}
  1803.   MIXERCONTROL_CT_UNITS_DECIBELS      = $00040000; { in 10ths }
  1804.   {$EXTERNALSYM MIXERCONTROL_CT_UNITS_PERCENT}
  1805.   MIXERCONTROL_CT_UNITS_PERCENT       = $00050000; { in 10ths }
  1806.  
  1807. { Commonly used control types for specifying TMixerControl.dwControlType }
  1808.  
  1809.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_CUSTOM}
  1810.   MIXERCONTROL_CONTROLTYPE_CUSTOM         = (MIXERCONTROL_CT_CLASS_CUSTOM or MIXERCONTROL_CT_UNITS_CUSTOM);
  1811.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BOOLEANMETER}
  1812.   MIXERCONTROL_CONTROLTYPE_BOOLEANMETER   = (MIXERCONTROL_CT_CLASS_METER or MIXERCONTROL_CT_SC_METER_POLLED or MIXERCONTROL_CT_UNITS_BOOLEAN);
  1813.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SIGNEDMETER}
  1814.   MIXERCONTROL_CONTROLTYPE_SIGNEDMETER    = (MIXERCONTROL_CT_CLASS_METER or MIXERCONTROL_CT_SC_METER_POLLED or MIXERCONTROL_CT_UNITS_SIGNED);
  1815.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_PEAKMETER}
  1816.   MIXERCONTROL_CONTROLTYPE_PEAKMETER      = (MIXERCONTROL_CONTROLTYPE_SIGNEDMETER + 1);
  1817.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER}
  1818.   MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER  = (MIXERCONTROL_CT_CLASS_METER or MIXERCONTROL_CT_SC_METER_POLLED or MIXERCONTROL_CT_UNITS_UNSIGNED);
  1819.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BOOLEAN}
  1820.   MIXERCONTROL_CONTROLTYPE_BOOLEAN        = (MIXERCONTROL_CT_CLASS_SWITCH or MIXERCONTROL_CT_SC_SWITCH_BOOLEAN or 
  1821.     MIXERCONTROL_CT_UNITS_BOOLEAN);
  1822.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_ONOFF}
  1823.   MIXERCONTROL_CONTROLTYPE_ONOFF          = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 1);
  1824.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MUTE}
  1825.   MIXERCONTROL_CONTROLTYPE_MUTE           = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 2);
  1826.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MONO}
  1827.   MIXERCONTROL_CONTROLTYPE_MONO           = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 3);
  1828.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_LOUDNESS}
  1829.   MIXERCONTROL_CONTROLTYPE_LOUDNESS       = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 4);
  1830.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_STEREOENH}
  1831.   MIXERCONTROL_CONTROLTYPE_STEREOENH      = (MIXERCONTROL_CONTROLTYPE_BOOLEAN + 5);
  1832.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BUTTON}
  1833.   MIXERCONTROL_CONTROLTYPE_BUTTON         = (MIXERCONTROL_CT_CLASS_SWITCH or MIXERCONTROL_CT_SC_SWITCH_BUTTON or 
  1834.     MIXERCONTROL_CT_UNITS_BOOLEAN);
  1835.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_DECIBELS}
  1836.   MIXERCONTROL_CONTROLTYPE_DECIBELS       = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_DECIBELS);
  1837.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SIGNED}
  1838.   MIXERCONTROL_CONTROLTYPE_SIGNED         = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_SIGNED);
  1839.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_UNSIGNED}
  1840.   MIXERCONTROL_CONTROLTYPE_UNSIGNED       = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_UNSIGNED);
  1841.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_PERCENT}
  1842.   MIXERCONTROL_CONTROLTYPE_PERCENT        = (MIXERCONTROL_CT_CLASS_NUMBER or MIXERCONTROL_CT_UNITS_PERCENT);
  1843.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SLIDER}
  1844.   MIXERCONTROL_CONTROLTYPE_SLIDER         = (MIXERCONTROL_CT_CLASS_SLIDER or MIXERCONTROL_CT_UNITS_SIGNED);
  1845.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_PAN}
  1846.   MIXERCONTROL_CONTROLTYPE_PAN            = (MIXERCONTROL_CONTROLTYPE_SLIDER + 1);
  1847.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_QSOUNDPAN}
  1848.   MIXERCONTROL_CONTROLTYPE_QSOUNDPAN      = (MIXERCONTROL_CONTROLTYPE_SLIDER + 2);
  1849.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_FADER}
  1850.   MIXERCONTROL_CONTROLTYPE_FADER          = (MIXERCONTROL_CT_CLASS_FADER or MIXERCONTROL_CT_UNITS_UNSIGNED);
  1851.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_VOLUME}
  1852.   MIXERCONTROL_CONTROLTYPE_VOLUME         = (MIXERCONTROL_CONTROLTYPE_FADER + 1);
  1853.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_BASS}
  1854.   MIXERCONTROL_CONTROLTYPE_BASS           = (MIXERCONTROL_CONTROLTYPE_FADER + 2);
  1855.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_TREBLE}
  1856.   MIXERCONTROL_CONTROLTYPE_TREBLE         = (MIXERCONTROL_CONTROLTYPE_FADER + 3);
  1857.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_EQUALIZER}
  1858.   MIXERCONTROL_CONTROLTYPE_EQUALIZER      = (MIXERCONTROL_CONTROLTYPE_FADER + 4);
  1859.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_SINGLESELECT}
  1860.   MIXERCONTROL_CONTROLTYPE_SINGLESELECT   = (MIXERCONTROL_CT_CLASS_LIST or MIXERCONTROL_CT_SC_LIST_SINGLE or MIXERCONTROL_CT_UNITS_BOOLEAN);
  1861.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MUX}
  1862.   MIXERCONTROL_CONTROLTYPE_MUX            = (MIXERCONTROL_CONTROLTYPE_SINGLESELECT + 1);
  1863.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT}
  1864.   MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT = (MIXERCONTROL_CT_CLASS_LIST or MIXERCONTROL_CT_SC_LIST_MULTIPLE or MIXERCONTROL_CT_UNITS_BOOLEAN);
  1865.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MIXER}
  1866.   MIXERCONTROL_CONTROLTYPE_MIXER          = (MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT + 1);
  1867.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MICROTIME}
  1868.   MIXERCONTROL_CONTROLTYPE_MICROTIME      = (MIXERCONTROL_CT_CLASS_TIME or MIXERCONTROL_CT_SC_TIME_MICROSECS or 
  1869.     MIXERCONTROL_CT_UNITS_UNSIGNED);
  1870.   {$EXTERNALSYM MIXERCONTROL_CONTROLTYPE_MILLITIME}
  1871.   MIXERCONTROL_CONTROLTYPE_MILLITIME      = (MIXERCONTROL_CT_CLASS_TIME or MIXERCONTROL_CT_SC_TIME_MILLISECS or 
  1872.     MIXERCONTROL_CT_UNITS_UNSIGNED);
  1873.  
  1874.  
  1875. type
  1876.   PMixerLineControlsA = ^TMixerLineControlsA;
  1877.   PMixerLineControlsW = ^TMixerLineControlsW;
  1878.   PMixerLineControls = PMixerLineControlsA;
  1879.   {$EXTERNALSYM tagMIXERLINECONTROLSA}
  1880.   tagMIXERLINECONTROLSA = record
  1881.     cbStruct: DWORD;               { size in bytes of MIXERLINECONTROLS }
  1882.     dwLineID: DWORD;               { line id (from MIXERLINE.dwLineID) }
  1883.     case Integer of
  1884.       0: (dwControlID: DWORD);     { MIXER_GETLINECONTROLSF_ONEBYID }
  1885.       1: (dwControlType: DWORD;    { MIXER_GETLINECONTROLSF_ONEBYTYPE }
  1886.           cControls: DWORD;        { count of controls pmxctrl points to }
  1887.           cbmxctrl: DWORD;         { size in bytes of _one_ MIXERCONTROL }
  1888.           pamxctrl: PMixerControlA);   { pointer to first MIXERCONTROL array }
  1889.   end;
  1890.   {$EXTERNALSYM tagMIXERLINECONTROLSW}
  1891.   tagMIXERLINECONTROLSW = record
  1892.     cbStruct: DWORD;               { size in bytes of MIXERLINECONTROLS }
  1893.     dwLineID: DWORD;               { line id (from MIXERLINE.dwLineID) }
  1894.     case Integer of
  1895.       0: (dwControlID: DWORD);     { MIXER_GETLINECONTROLSF_ONEBYID }
  1896.       1: (dwControlType: DWORD;    { MIXER_GETLINECONTROLSF_ONEBYTYPE }
  1897.           cControls: DWORD;        { count of controls pmxctrl points to }
  1898.           cbmxctrl: DWORD;         { size in bytes of _one_ MIXERCONTROL }
  1899.           pamxctrl: PMixerControlW);   { pointer to first MIXERCONTROL array }
  1900.   end;
  1901.   {$EXTERNALSYM tagMIXERLINECONTROLS}
  1902.   tagMIXERLINECONTROLS = tagMIXERLINECONTROLSA;
  1903.   TMixerLineControlsA = tagMIXERLINECONTROLSA;
  1904.   TMixerLineControlsW = tagMIXERLINECONTROLSW;
  1905.   TMixerLineControls = TMixerLineControlsA;
  1906.   {$EXTERNALSYM MIXERLINECONTROLSA}
  1907.   MIXERLINECONTROLSA = tagMIXERLINECONTROLSA;
  1908.   {$EXTERNALSYM MIXERLINECONTROLSW}
  1909.   MIXERLINECONTROLSW = tagMIXERLINECONTROLSW;
  1910.   {$EXTERNALSYM MIXERLINECONTROLS}
  1911.   MIXERLINECONTROLS = MIXERLINECONTROLSA;
  1912.  
  1913. {$EXTERNALSYM mixerGetLineControlsA}
  1914. function mixerGetLineControlsA(hmxobj: HMIXEROBJ; pmxlc: PMixerLineControlsA; fdwControls: DWORD): MMRESULT; stdcall;
  1915. {$EXTERNALSYM mixerGetLineControlsW}
  1916. function mixerGetLineControlsW(hmxobj: HMIXEROBJ; pmxlc: PMixerLineControlsW; fdwControls: DWORD): MMRESULT; stdcall;
  1917. {$EXTERNALSYM mixerGetLineControls}
  1918. function mixerGetLineControls(hmxobj: HMIXEROBJ; pmxlc: PMixerLineControls; fdwControls: DWORD): MMRESULT; stdcall;
  1919.  
  1920. const
  1921.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_ALL}
  1922.   MIXER_GETLINECONTROLSF_ALL          = $00000000;
  1923.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_ONEBYID}
  1924.   MIXER_GETLINECONTROLSF_ONEBYID      = $00000001;
  1925.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_ONEBYTYPE}
  1926.   MIXER_GETLINECONTROLSF_ONEBYTYPE    = $00000002;
  1927.  
  1928.   {$EXTERNALSYM MIXER_GETLINECONTROLSF_QUERYMASK}
  1929.   MIXER_GETLINECONTROLSF_QUERYMASK    = $0000000F;
  1930.  
  1931. type
  1932.   PMixerControlDetails = ^TMixerControlDetails;
  1933.   {$EXTERNALSYM tMIXERCONTROLDETAILS}
  1934.   tMIXERCONTROLDETAILS = record
  1935.     cbStruct: DWORD;       { size in bytes of MIXERCONTROLDETAILS }
  1936.     dwControlID: DWORD;    { control id to get/set details on }
  1937.     cChannels: DWORD;      { number of channels in paDetails array }
  1938.     case Integer of
  1939.        0: (hwndOwner: HWND);        { for MIXER_SETCONTROLDETAILSF_CUSTOM }
  1940.        1: (cMultipleItems: DWORD;   { if _MULTIPLE, the number of items per channel }
  1941.            cbDetails: DWORD;        { size of _one_ details_XX struct }
  1942.            paDetails: Pointer);     { pointer to array of details_XX structs }
  1943.   end;
  1944.  
  1945.   PMixerControlDetailsListTextA = ^TMixerControlDetailsListTextA;
  1946.   PMixerControlDetailsListTextW = ^TMixerControlDetailsListTextW;
  1947.   PMixerControlDetailsListText = PMixerControlDetailsListTextA;
  1948.   {$EXTERNALSYM tagMIXERCONTROLDETAILS_LISTTEXTA}
  1949.   tagMIXERCONTROLDETAILS_LISTTEXTA = record
  1950.     dwParam1: DWORD;
  1951.     dwParam2: DWORD;
  1952.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of AnsiChar;
  1953.   end;
  1954.   {$EXTERNALSYM tagMIXERCONTROLDETAILS_LISTTEXTW}
  1955.   tagMIXERCONTROLDETAILS_LISTTEXTW = record
  1956.     dwParam1: DWORD;
  1957.     dwParam2: DWORD;
  1958.     szName: array[0..MIXER_LONG_NAME_CHARS - 1] of WideChar;
  1959.   end;
  1960.   {$EXTERNALSYM tagMIXERCONTROLDETAILS_LISTTEXT}
  1961.   tagMIXERCONTROLDETAILS_LISTTEXT = tagMIXERCONTROLDETAILS_LISTTEXTA;
  1962.   TMixerControlDetailsListTextA = tagMIXERCONTROLDETAILS_LISTTEXTA;
  1963.   TMixerControlDetailsListTextW = tagMIXERCONTROLDETAILS_LISTTEXTW;
  1964.   TMixerControlDetailsListText = TMixerControlDetailsListTextA;
  1965.   {$EXTERNALSYM MIXERCONTROLDETAILS_LISTTEXTA}
  1966.   MIXERCONTROLDETAILS_LISTTEXTA = tagMIXERCONTROLDETAILS_LISTTEXTA;
  1967.   {$EXTERNALSYM MIXERCONTROLDETAILS_LISTTEXTW}
  1968.   MIXERCONTROLDETAILS_LISTTEXTW = tagMIXERCONTROLDETAILS_LISTTEXTW;
  1969.   {$EXTERNALSYM MIXERCONTROLDETAILS_LISTTEXT}
  1970.   MIXERCONTROLDETAILS_LISTTEXT = MIXERCONTROLDETAILS_LISTTEXTA;
  1971.  
  1972.   PMixerControlDetailsBoolean = ^TMixerControlDetailsBoolean;
  1973.   {$EXTERNALSYM tMIXERCONTROLDETAILS_BOOLEAN}
  1974.   tMIXERCONTROLDETAILS_BOOLEAN = record
  1975.     fValue: Longint;
  1976.   end;
  1977.   TMixerControlDetailsBoolean = tMIXERCONTROLDETAILS_BOOLEAN;
  1978.   {$EXTERNALSYM MIXERCONTROLDETAILS_BOOLEAN}
  1979.   MIXERCONTROLDETAILS_BOOLEAN = tMIXERCONTROLDETAILS_BOOLEAN;
  1980.  
  1981.   PMixerControlDetailsSigned = ^TMixerControlDetailsSigned;
  1982.   {$EXTERNALSYM tMIXERCONTROLDETAILS_SIGNED}
  1983.   tMIXERCONTROLDETAILS_SIGNED = record
  1984.     lValue: Longint;
  1985.   end;
  1986.   TMixerControlDetailsSigned = tMIXERCONTROLDETAILS_SIGNED;
  1987.   {$EXTERNALSYM MIXERCONTROLDETAILS_SIGNED}
  1988.   MIXERCONTROLDETAILS_SIGNED = tMIXERCONTROLDETAILS_SIGNED;
  1989.  
  1990.   PMixerControlDetailsUnsigned = ^TMixerControlDetailsUnsigned;
  1991.   {$EXTERNALSYM tMIXERCONTROLDETAILS_UNSIGNED}
  1992.   tMIXERCONTROLDETAILS_UNSIGNED = record
  1993.     dwValue: DWORD;
  1994.   end;
  1995.   TMixerControlDetailsUnsigned = tMIXERCONTROLDETAILS_UNSIGNED;
  1996.   {$EXTERNALSYM MIXERCONTROLDETAILS_UNSIGNED}
  1997.   MIXERCONTROLDETAILS_UNSIGNED = tMIXERCONTROLDETAILS_UNSIGNED;
  1998.  
  1999. {$EXTERNALSYM mixerGetControlDetailsA}
  2000. function mixerGetControlDetailsA(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2001. {$EXTERNALSYM mixerGetControlDetailsW}
  2002. function mixerGetControlDetailsW(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2003. {$EXTERNALSYM mixerGetControlDetails}
  2004. function mixerGetControlDetails(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2005.  
  2006. const
  2007.   {$EXTERNALSYM MIXER_GETCONTROLDETAILSF_VALUE}
  2008.   MIXER_GETCONTROLDETAILSF_VALUE      = $00000000;
  2009.   {$EXTERNALSYM MIXER_GETCONTROLDETAILSF_LISTTEXT}
  2010.   MIXER_GETCONTROLDETAILSF_LISTTEXT   = $00000001;
  2011.  
  2012.   {$EXTERNALSYM MIXER_GETCONTROLDETAILSF_QUERYMASK}
  2013.   MIXER_GETCONTROLDETAILSF_QUERYMASK  = $0000000F;
  2014.  
  2015. {$EXTERNALSYM mixerSetControlDetails}
  2016. function mixerSetControlDetails(hmxobj: HMIXEROBJ; pmxcd: PMixerControlDetails; fdwDetails: DWORD): MMRESULT; stdcall;
  2017.  
  2018. const
  2019.   {$EXTERNALSYM MIXER_SETCONTROLDETAILSF_VALUE}
  2020.   MIXER_SETCONTROLDETAILSF_VALUE      = $00000000;
  2021.   {$EXTERNALSYM MIXER_SETCONTROLDETAILSF_CUSTOM}
  2022.   MIXER_SETCONTROLDETAILSF_CUSTOM     = $00000001;
  2023.  
  2024.   {$EXTERNALSYM MIXER_SETCONTROLDETAILSF_QUERYMASK}
  2025.   MIXER_SETCONTROLDETAILSF_QUERYMASK  = $0000000F;
  2026.  
  2027. {***************************************************************************
  2028.  
  2029.                             Timer support
  2030.  
  2031. ***************************************************************************}
  2032.  
  2033. { timer error return values }
  2034. const
  2035.   {$EXTERNALSYM TIMERR_NOERROR}
  2036.   TIMERR_NOERROR        = 0;                  { no error }
  2037.   {$EXTERNALSYM TIMERR_NOCANDO}
  2038.   TIMERR_NOCANDO        = TIMERR_BASE+1;      { request not completed }
  2039.   {$EXTERNALSYM TIMERR_STRUCT}
  2040.   TIMERR_STRUCT         = TIMERR_BASE+33;     { time struct size }
  2041.  
  2042. { timer data types }
  2043. type
  2044.   TFNTimeCallBack = procedure(uTimerID, uMessage: UINT; 
  2045.     dwUser, dw1, dw2: DWORD) stdcall;
  2046.  
  2047.  
  2048. { flags for wFlags parameter of timeSetEvent() function }
  2049. const
  2050.   {$EXTERNALSYM TIME_ONESHOT}
  2051.   TIME_ONESHOT    = 0;   { program timer for single event }
  2052.   {$EXTERNALSYM TIME_PERIODIC}
  2053.   TIME_PERIODIC   = 1;   { program for continuous periodic event }
  2054.   {$EXTERNALSYM TIME_CALLBACK_FUNCTION}
  2055.   TIME_CALLBACK_FUNCTION    = $0000;  { callback is function }
  2056.   {$EXTERNALSYM TIME_CALLBACK_EVENT_SET}
  2057.   TIME_CALLBACK_EVENT_SET   = $0010;  { callback is event - use SetEvent }
  2058.   {$EXTERNALSYM TIME_CALLBACK_EVENT_PULSE}
  2059.   TIME_CALLBACK_EVENT_PULSE = $0020;  { callback is event - use PulseEvent }
  2060.  
  2061. { timer device capabilities data structure }
  2062. type
  2063.   PTimeCaps = ^TTimeCaps;
  2064.   {$EXTERNALSYM timecaps_tag}
  2065.   timecaps_tag = record
  2066.     wPeriodMin: UINT;     { minimum period supported  }
  2067.     wPeriodMax: UINT;     { maximum period supported  }
  2068.   end;
  2069.   TTimeCaps = timecaps_tag;
  2070.   {$EXTERNALSYM TIMECAPS}
  2071.   TIMECAPS = timecaps_tag;
  2072.  
  2073. { timer function prototypes }
  2074. {$EXTERNALSYM timeGetSystemTime}
  2075. function timeGetSystemTime(lpTime: PMMTime; uSize: Word): MMRESULT; stdcall;
  2076.  
  2077. {$EXTERNALSYM timeGetTime}
  2078. function timeGetTime: DWORD; stdcall;
  2079. {$EXTERNALSYM timeSetEvent}
  2080. function timeSetEvent(uDelay, uResolution: UINT;
  2081.   lpFunction: TFNTimeCallBack; dwUser: DWORD; uFlags: UINT): MMRESULT; stdcall;
  2082. {$EXTERNALSYM timeKillEvent}
  2083. function timeKillEvent(uTimerID: UINT): MMRESULT; stdcall;
  2084. {$EXTERNALSYM timeGetDevCaps}
  2085. function timeGetDevCaps(lpTimeCaps: PTimeCaps; uSize: UINT): MMRESULT; stdcall;
  2086. {$EXTERNALSYM timeBeginPeriod}
  2087. function timeBeginPeriod(uPeriod: UINT): MMRESULT; stdcall;
  2088. {$EXTERNALSYM timeEndPeriod}
  2089. function timeEndPeriod(uPeriod: UINT): MMRESULT; stdcall;
  2090.  
  2091.  
  2092. {***************************************************************************
  2093.  
  2094.                             Joystick support
  2095.  
  2096. ***************************************************************************}
  2097.  
  2098. { joystick error return values }
  2099. const
  2100.   {$EXTERNALSYM JOYERR_NOERROR}
  2101.   JOYERR_NOERROR        = 0;                  { no error }
  2102.   {$EXTERNALSYM JOYERR_PARMS}
  2103.   JOYERR_PARMS          = JOYERR_BASE+5;      { bad parameters }
  2104.   {$EXTERNALSYM JOYERR_NOCANDO}
  2105.   JOYERR_NOCANDO        = JOYERR_BASE+6;      { request not completed }
  2106.   {$EXTERNALSYM JOYERR_UNPLUGGED}
  2107.   JOYERR_UNPLUGGED      = JOYERR_BASE+7;      { joystick is unplugged }
  2108.  
  2109. { constants used with TJoyInfo and TJoyInfoEx structure and MM_JOY* messages }
  2110. const
  2111.   {$EXTERNALSYM JOY_BUTTON1}
  2112.   JOY_BUTTON1         = $0001;
  2113.   {$EXTERNALSYM JOY_BUTTON2}
  2114.   JOY_BUTTON2         = $0002;
  2115.   {$EXTERNALSYM JOY_BUTTON3}
  2116.   JOY_BUTTON3         = $0004;
  2117.   {$EXTERNALSYM JOY_BUTTON4}
  2118.   JOY_BUTTON4         = $0008;
  2119.   {$EXTERNALSYM JOY_BUTTON1CHG}
  2120.   JOY_BUTTON1CHG      = $0100;
  2121.   {$EXTERNALSYM JOY_BUTTON2CHG}
  2122.   JOY_BUTTON2CHG      = $0200;
  2123.   {$EXTERNALSYM JOY_BUTTON3CHG}
  2124.   JOY_BUTTON3CHG      = $0400;
  2125.   {$EXTERNALSYM JOY_BUTTON4CHG}
  2126.   JOY_BUTTON4CHG      = $0800;
  2127.  
  2128. { constants used with TJoyInfoEx }
  2129.   {$EXTERNALSYM JOY_BUTTON5}
  2130.   JOY_BUTTON5         = $00000010;
  2131.   {$EXTERNALSYM JOY_BUTTON6}
  2132.   JOY_BUTTON6         = $00000020;
  2133.   {$EXTERNALSYM JOY_BUTTON7}
  2134.   JOY_BUTTON7         = $00000040;
  2135.   {$EXTERNALSYM JOY_BUTTON8}
  2136.   JOY_BUTTON8         = $00000080;
  2137.   {$EXTERNALSYM JOY_BUTTON9}
  2138.   JOY_BUTTON9         = $00000100;
  2139.   {$EXTERNALSYM JOY_BUTTON10}
  2140.   JOY_BUTTON10        = $00000200;
  2141.   {$EXTERNALSYM JOY_BUTTON11}
  2142.   JOY_BUTTON11        = $00000400;
  2143.   {$EXTERNALSYM JOY_BUTTON12}
  2144.   JOY_BUTTON12        = $00000800;
  2145.   {$EXTERNALSYM JOY_BUTTON13}
  2146.   JOY_BUTTON13        = $00001000;
  2147.   {$EXTERNALSYM JOY_BUTTON14}
  2148.   JOY_BUTTON14        = $00002000;
  2149.   {$EXTERNALSYM JOY_BUTTON15}
  2150.   JOY_BUTTON15        = $00004000;
  2151.   {$EXTERNALSYM JOY_BUTTON16}
  2152.   JOY_BUTTON16        = $00008000;
  2153.   {$EXTERNALSYM JOY_BUTTON17}
  2154.   JOY_BUTTON17        = $00010000;
  2155.   {$EXTERNALSYM JOY_BUTTON18}
  2156.   JOY_BUTTON18        = $00020000;
  2157.   {$EXTERNALSYM JOY_BUTTON19}
  2158.   JOY_BUTTON19        = $00040000;
  2159.   {$EXTERNALSYM JOY_BUTTON20}
  2160.   JOY_BUTTON20        = $00080000;
  2161.   {$EXTERNALSYM JOY_BUTTON21}
  2162.   JOY_BUTTON21        = $00100000;
  2163.   {$EXTERNALSYM JOY_BUTTON22}
  2164.   JOY_BUTTON22        = $00200000;
  2165.   {$EXTERNALSYM JOY_BUTTON23}
  2166.   JOY_BUTTON23        = $00400000;
  2167.   {$EXTERNALSYM JOY_BUTTON24}
  2168.   JOY_BUTTON24        = $00800000;
  2169.   {$EXTERNALSYM JOY_BUTTON25}
  2170.   JOY_BUTTON25        = $01000000;
  2171.   {$EXTERNALSYM JOY_BUTTON26}
  2172.   JOY_BUTTON26        = $02000000;
  2173.   {$EXTERNALSYM JOY_BUTTON27}
  2174.   JOY_BUTTON27        = $04000000;
  2175.   {$EXTERNALSYM JOY_BUTTON28}
  2176.   JOY_BUTTON28        = $08000000;
  2177.   {$EXTERNALSYM JOY_BUTTON29}
  2178.   JOY_BUTTON29        = $10000000;
  2179.   {$EXTERNALSYM JOY_BUTTON30}
  2180.   JOY_BUTTON30        = $20000000;
  2181.   {$EXTERNALSYM JOY_BUTTON31}
  2182.   JOY_BUTTON31        = $40000000;
  2183.   {$EXTERNALSYM JOY_BUTTON32}
  2184.   JOY_BUTTON32        = $80000000;
  2185.  
  2186. { constants used with TJoyInfoEx }
  2187.   {$EXTERNALSYM JOY_POVCENTERED}
  2188.   JOY_POVCENTERED    = -1;
  2189.   {$EXTERNALSYM JOY_POVFORWARD}
  2190.   JOY_POVFORWARD    = 0;
  2191.   {$EXTERNALSYM JOY_POVRIGHT}
  2192.   JOY_POVRIGHT        = 9000;
  2193.   {$EXTERNALSYM JOY_POVBACKWARD}
  2194.   JOY_POVBACKWARD    = 18000;
  2195.   {$EXTERNALSYM JOY_POVLEFT}
  2196.   JOY_POVLEFT        = 27000;
  2197.  
  2198.   {$EXTERNALSYM JOY_RETURNX}
  2199.   JOY_RETURNX        = $00000001;
  2200.   {$EXTERNALSYM JOY_RETURNY}
  2201.   JOY_RETURNY        = $00000002;
  2202.   {$EXTERNALSYM JOY_RETURNZ}
  2203.   JOY_RETURNZ        = $00000004;
  2204.   {$EXTERNALSYM JOY_RETURNR}
  2205.   JOY_RETURNR        = $00000008;
  2206.   {$EXTERNALSYM JOY_RETURNU}
  2207.   JOY_RETURNU        = $00000010; { axis 5 }
  2208.   {$EXTERNALSYM JOY_RETURNV}
  2209.   JOY_RETURNV        = $00000020; { axis 6 }
  2210.   {$EXTERNALSYM JOY_RETURNPOV}
  2211.   JOY_RETURNPOV        = $00000040;
  2212.   {$EXTERNALSYM JOY_RETURNBUTTONS}
  2213.   JOY_RETURNBUTTONS    = $00000080;
  2214.   {$EXTERNALSYM JOY_RETURNRAWDATA}
  2215.   JOY_RETURNRAWDATA    = $00000100;
  2216.   {$EXTERNALSYM JOY_RETURNPOVCTS}
  2217.   JOY_RETURNPOVCTS    = $00000200;
  2218.   {$EXTERNALSYM JOY_RETURNCENTERED}
  2219.   JOY_RETURNCENTERED    = $00000400;
  2220.   {$EXTERNALSYM JOY_USEDEADZONE}
  2221.   JOY_USEDEADZONE        = $00000800;
  2222.   {$EXTERNALSYM JOY_RETURNALL}
  2223.   JOY_RETURNALL  = (JOY_RETURNX or JOY_RETURNY or JOY_RETURNZ or
  2224.     JOY_RETURNR or JOY_RETURNU or JOY_RETURNV or
  2225.     JOY_RETURNPOV or JOY_RETURNBUTTONS);
  2226.   {$EXTERNALSYM JOY_CAL_READALWAYS}
  2227.   JOY_CAL_READALWAYS    = $00010000;
  2228.   {$EXTERNALSYM JOY_CAL_READXYONLY}
  2229.   JOY_CAL_READXYONLY    = $00020000;
  2230.   {$EXTERNALSYM JOY_CAL_READ3}
  2231.   JOY_CAL_READ3        = $00040000;
  2232.   {$EXTERNALSYM JOY_CAL_READ4}
  2233.   JOY_CAL_READ4        = $00080000;
  2234.   {$EXTERNALSYM JOY_CAL_READXONLY}
  2235.   JOY_CAL_READXONLY    = $00100000;
  2236.   {$EXTERNALSYM JOY_CAL_READYONLY}
  2237.   JOY_CAL_READYONLY    = $00200000;
  2238.   {$EXTERNALSYM JOY_CAL_READ5}
  2239.   JOY_CAL_READ5        = $00400000;
  2240.   {$EXTERNALSYM JOY_CAL_READ6}
  2241.   JOY_CAL_READ6        = $00800000;
  2242.   {$EXTERNALSYM JOY_CAL_READZONLY}
  2243.   JOY_CAL_READZONLY    = $01000000;
  2244.   {$EXTERNALSYM JOY_CAL_READRONLY}
  2245.   JOY_CAL_READRONLY    = $02000000;
  2246.   {$EXTERNALSYM JOY_CAL_READUONLY}
  2247.   JOY_CAL_READUONLY    = $04000000;
  2248.   {$EXTERNALSYM JOY_CAL_READVONLY}
  2249.   JOY_CAL_READVONLY    = $08000000;
  2250.  
  2251. { joystick ID constants }
  2252. const
  2253.   {$EXTERNALSYM JOYSTICKID1}
  2254.   JOYSTICKID1         = 0;
  2255.   {$EXTERNALSYM JOYSTICKID2}
  2256.   JOYSTICKID2         = 1;
  2257.  
  2258. { joystick driver capabilites }
  2259.   {$EXTERNALSYM JOYCAPS_HASZ}
  2260.   JOYCAPS_HASZ        = $000;
  2261.   {$EXTERNALSYM JOYCAPS_HASR}
  2262.   JOYCAPS_HASR        = $0002;
  2263.   {$EXTERNALSYM JOYCAPS_HASU}
  2264.   JOYCAPS_HASU        = $0004;
  2265.   {$EXTERNALSYM JOYCAPS_HASV}
  2266.   JOYCAPS_HASV        = $0008;
  2267.   {$EXTERNALSYM JOYCAPS_HASPOV}
  2268.   JOYCAPS_HASPOV        = $0010;
  2269.   {$EXTERNALSYM JOYCAPS_POV4DIR}
  2270.   JOYCAPS_POV4DIR        = $0020;
  2271.   {$EXTERNALSYM JOYCAPS_POVCTS}
  2272.   JOYCAPS_POVCTS        = $0040;
  2273.  
  2274. { joystick device capabilities data structure }
  2275. type
  2276.   PJoyCapsA = ^TJoyCapsA;
  2277.   PJoyCapsW = ^TJoyCapsW;
  2278.   PJoyCaps = PJoyCapsA;
  2279.   {$EXTERNALSYM tagJOYCAPSA}
  2280.   tagJOYCAPSA = record
  2281.     wMid: Word;                  { manufacturer ID }
  2282.     wPid: Word;                  { product ID }
  2283.     szPname: array[0..MAXPNAMELEN-1] of AnsiChar;  { product name (NULL terminated string) }
  2284.     wXmin: UINT;                 { minimum x position value }
  2285.     wXmax: UINT;                 { maximum x position value }
  2286.     wYmin: UINT;                 { minimum y position value }
  2287.     wYmax: UINT;                 { maximum y position value }
  2288.     wZmin: UINT;                 { minimum z position value }
  2289.     wZmax: UINT;                 { maximum z position value }
  2290.     wNumButtons: UINT;           { number of buttons }
  2291.     wPeriodMin: UINT;            { minimum message period when captured }
  2292.     wPeriodMax: UINT;            { maximum message period when captured }
  2293.     wRmin: UINT;                 { minimum r position value }
  2294.     wRmax: UINT;                 { maximum r position value }
  2295.     wUmin: UINT;                 { minimum u (5th axis) position value }
  2296.     wUmax: UINT;                 { maximum u (5th axis) position value }
  2297.     wVmin: UINT;                 { minimum v (6th axis) position value }
  2298.     wVmax: UINT;                 { maximum v (6th axis) position value }
  2299.     wCaps: UINT;                 { joystick capabilites }
  2300.     wMaxAxes: UINT;         { maximum number of axes supported }
  2301.     wNumAxes: UINT;         { number of axes in use }
  2302.     wMaxButtons: UINT;         { maximum number of buttons supported }
  2303.     szRegKey: array[0..MAXPNAMELEN - 1] of AnsiChar; { registry key }
  2304.     szOEMVxD: array[0..MAX_JOYSTICKOEMVXDNAME - 1] of AnsiChar; { OEM VxD in use }
  2305.   end;
  2306.   {$EXTERNALSYM tagJOYCAPSW}
  2307.   tagJOYCAPSW = record
  2308.     wMid: Word;                  { manufacturer ID }
  2309.     wPid: Word;                  { product ID }
  2310.     szPname: array[0..MAXPNAMELEN-1] of WideChar;  { product name (NULL terminated string) }
  2311.     wXmin: UINT;                 { minimum x position value }
  2312.     wXmax: UINT;                 { maximum x position value }
  2313.     wYmin: UINT;                 { minimum y position value }
  2314.     wYmax: UINT;                 { maximum y position value }
  2315.     wZmin: UINT;                 { minimum z position value }
  2316.     wZmax: UINT;                 { maximum z position value }
  2317.     wNumButtons: UINT;           { number of buttons }
  2318.     wPeriodMin: UINT;            { minimum message period when captured }
  2319.     wPeriodMax: UINT;            { maximum message period when captured }
  2320.     wRmin: UINT;                 { minimum r position value }
  2321.     wRmax: UINT;                 { maximum r position value }
  2322.     wUmin: UINT;                 { minimum u (5th axis) position value }
  2323.     wUmax: UINT;                 { maximum u (5th axis) position value }
  2324.     wVmin: UINT;                 { minimum v (6th axis) position value }
  2325.     wVmax: UINT;                 { maximum v (6th axis) position value }
  2326.     wCaps: UINT;                 { joystick capabilites }
  2327.     wMaxAxes: UINT;         { maximum number of axes supported }
  2328.     wNumAxes: UINT;         { number of axes in use }
  2329.     wMaxButtons: UINT;         { maximum number of buttons supported }
  2330.     szRegKey: array[0..MAXPNAMELEN - 1] of WideChar; { registry key }
  2331.     szOEMVxD: array[0..MAX_JOYSTICKOEMVXDNAME - 1] of WideChar; { OEM VxD in use }
  2332.   end;
  2333.   {$EXTERNALSYM tagJOYCAPS}
  2334.   tagJOYCAPS = tagJOYCAPSA;
  2335.   TJoyCapsA = tagJOYCAPSA;
  2336.   TJoyCapsW = tagJOYCAPSW;
  2337.   TJoyCaps = TJoyCapsA;
  2338.   {$EXTERNALSYM JOYCAPSA}
  2339.   JOYCAPSA = tagJOYCAPSA;
  2340.   {$EXTERNALSYM JOYCAPSW}
  2341.   JOYCAPSW = tagJOYCAPSW;
  2342.   {$EXTERNALSYM JOYCAPS}
  2343.   JOYCAPS = JOYCAPSA;
  2344.  
  2345. { joystick information data structure }
  2346. type
  2347.   PJoyInfo = ^TJoyInfo;
  2348.   {$EXTERNALSYM joyinfo_tag}
  2349.   joyinfo_tag = record
  2350.     wXpos: UINT;                 { x position }
  2351.     wYpos: UINT;                 { y position }
  2352.     wZpos: UINT;                 { z position }
  2353.     wButtons: UINT;              { button states }
  2354.   end;
  2355.   TJoyInfo = joyinfo_tag;
  2356.   {$EXTERNALSYM JOYINFO}
  2357.   JOYINFO = joyinfo_tag;
  2358.  
  2359.   PJoyInfoEx = ^TJoyInfoEx;
  2360.   {$EXTERNALSYM joyinfoex_tag}
  2361.   joyinfoex_tag = record
  2362.     dwSize: DWORD;         { size of structure }
  2363.     dwFlags: DWORD;         { flags to indicate what to return }
  2364.     wXpos: UINT;         { x position }
  2365.     wYpos: UINT;         { y position }
  2366.     wZpos: UINT;         { z position }
  2367.     dwRpos: DWORD;         { rudder/4th axis position }
  2368.     dwUpos: DWORD;         { 5th axis position }
  2369.     dwVpos: DWORD;         { 6th axis position }
  2370.     wButtons: UINT;      { button states }
  2371.     dwButtonNumber: DWORD;  { current button number pressed }
  2372.     dwPOV: DWORD;           { point of view state }
  2373.     dwReserved1: DWORD;         { reserved for communication between winmm & driver }
  2374.     dwReserved2: DWORD;         { reserved for future expansion }
  2375.   end;
  2376.   TJoyInfoEx = joyinfoex_tag;
  2377.   {$EXTERNALSYM JOYINFOEX}
  2378.   JOYINFOEX = joyinfoex_tag;
  2379.  
  2380. { joystick function prototypes }
  2381. {$EXTERNALSYM joyGetNumDevs}
  2382. function joyGetNumDevs: UINT; stdcall;
  2383. {$EXTERNALSYM joyGetDevCapsA}
  2384. function joyGetDevCapsA(uJoyID: UINT; lpCaps: PJoyCapsA; uSize: UINT): MMRESULT; stdcall;
  2385. {$EXTERNALSYM joyGetDevCapsW}
  2386. function joyGetDevCapsW(uJoyID: UINT; lpCaps: PJoyCapsW; uSize: UINT): MMRESULT; stdcall;
  2387. {$EXTERNALSYM joyGetDevCaps}
  2388. function joyGetDevCaps(uJoyID: UINT; lpCaps: PJoyCaps; uSize: UINT): MMRESULT; stdcall;
  2389. {$EXTERNALSYM joyGetPos}
  2390. function joyGetPos(uJoyID: UINT; lpInfo: PJoyInfo): MMRESULT; stdcall;
  2391. {$EXTERNALSYM joyGetPosEx}
  2392. function joyGetPosEx(uJoyID: UINT; lpInfo: PJoyInfoEx): MMRESULT; stdcall;
  2393. {$EXTERNALSYM joyGetThreshold}
  2394. function joyGetThreshold(uJoyID: UINT; lpuThreshold: PUINT): MMRESULT; stdcall;
  2395. {$EXTERNALSYM joyReleaseCapture}
  2396. function joyReleaseCapture(uJoyID: UINT): MMRESULT; stdcall;
  2397. {$EXTERNALSYM joySetCapture}
  2398. function joySetCapture(Handle: HWND; uJoyID, uPeriod: UINT; bChanged: BOOL): MMRESULT; stdcall;
  2399. {$EXTERNALSYM joySetThreshold}
  2400. function joySetThreshold(uJoyID, uThreshold: UINT): MMRESULT; stdcall;
  2401.  
  2402. {***************************************************************************
  2403.  
  2404.                         Multimedia File I/O support
  2405.  
  2406. ***************************************************************************}
  2407.  
  2408. { MMIO error return values }
  2409. const
  2410.   {$EXTERNALSYM MMIOERR_BASE}
  2411.   MMIOERR_BASE            = 256;
  2412.   {$EXTERNALSYM MMIOERR_FILENOTFOUND}
  2413.   MMIOERR_FILENOTFOUND    = MMIOERR_BASE + 1;  { file not found }
  2414.   {$EXTERNALSYM MMIOERR_OUTOFMEMORY}
  2415.   MMIOERR_OUTOFMEMORY     = MMIOERR_BASE + 2;  { out of memory }
  2416.   {$EXTERNALSYM MMIOERR_CANNOTOPEN}
  2417.   MMIOERR_CANNOTOPEN      = MMIOERR_BASE + 3;  { cannot open }
  2418.   {$EXTERNALSYM MMIOERR_CANNOTCLOSE}
  2419.   MMIOERR_CANNOTCLOSE     = MMIOERR_BASE + 4;  { cannot close }
  2420.   {$EXTERNALSYM MMIOERR_CANNOTREAD}
  2421.   MMIOERR_CANNOTREAD      = MMIOERR_BASE + 5;  { cannot read }
  2422.   {$EXTERNALSYM MMIOERR_CANNOTWRITE}
  2423.   MMIOERR_CANNOTWRITE     = MMIOERR_BASE + 6;  { cannot write }
  2424.   {$EXTERNALSYM MMIOERR_CANNOTSEEK}
  2425.   MMIOERR_CANNOTSEEK      = MMIOERR_BASE + 7;  { cannot seek }
  2426.   {$EXTERNALSYM MMIOERR_CANNOTEXPAND}
  2427.   MMIOERR_CANNOTEXPAND    = MMIOERR_BASE + 8;  { cannot expand file }
  2428.   {$EXTERNALSYM MMIOERR_CHUNKNOTFOUND}
  2429.   MMIOERR_CHUNKNOTFOUND   = MMIOERR_BASE + 9;  { chunk not found }
  2430.   {$EXTERNALSYM MMIOERR_UNBUFFERED}
  2431.   MMIOERR_UNBUFFERED      = MMIOERR_BASE + 10; { file is unbuffered }
  2432.   {$EXTERNALSYM MMIOERR_PATHNOTFOUND}
  2433.   MMIOERR_PATHNOTFOUND        = MMIOERR_BASE + 11;  { path incorrect }
  2434.   {$EXTERNALSYM MMIOERR_ACCESSDENIED}
  2435.   MMIOERR_ACCESSDENIED        = MMIOERR_BASE + 12;  { file was protected }
  2436.   {$EXTERNALSYM MMIOERR_SHARINGVIOLATION}
  2437.   MMIOERR_SHARINGVIOLATION    = MMIOERR_BASE + 13;  { file in use }
  2438.   {$EXTERNALSYM MMIOERR_NETWORKERROR}
  2439.   MMIOERR_NETWORKERROR        = MMIOERR_BASE + 14;  { network not responding }
  2440.   {$EXTERNALSYM MMIOERR_TOOMANYOPENFILES}
  2441.   MMIOERR_TOOMANYOPENFILES    = MMIOERR_BASE + 15;  { no more file handles  }
  2442.   {$EXTERNALSYM MMIOERR_INVALIDFILE}
  2443.   MMIOERR_INVALIDFILE         = MMIOERR_BASE + 16;  { default error file error }
  2444.  
  2445. { MMIO constants }
  2446. const
  2447.   {$EXTERNALSYM CFSEPCHAR}
  2448.   CFSEPCHAR       = '+';             { compound file name separator char. }
  2449.  
  2450. type
  2451. { MMIO data types }
  2452.   {$EXTERNALSYM FOURCC}
  2453.   FOURCC = DWORD;                    { a four character code }
  2454.  
  2455.   PHMMIO = ^HMMIO;
  2456.   {$EXTERNALSYM HMMIO}
  2457.   HMMIO = Integer;      { a handle to an open file }
  2458.  
  2459.   TFNMMIOProc = function(lpmmioinfo: PChar; uMessage: UINT; lParam1, lParam2: LPARAM): Longint stdcall;
  2460.  
  2461. { general MMIO information data structure }
  2462. type
  2463.   PMMIOInfo = ^TMMIOInfo;
  2464.   {$EXTERNALSYM _MMIOINFO}
  2465.   _MMIOINFO = record
  2466.     { general fields }
  2467.     dwFlags: DWORD;        { general status flags }
  2468.     fccIOProc: FOURCC;      { pointer to I/O procedure }
  2469.     pIOProc: TFNMMIOProc;        { pointer to I/O procedure }
  2470.     wErrorRet: UINT;      { place for error to be returned }
  2471.     hTask: HTASK;          { alternate local task }
  2472.  
  2473.     { fields maintained by MMIO functions during buffered I/O }
  2474.     cchBuffer: Longint;      { size of I/O buffer (or 0L) }
  2475.     pchBuffer: PChar;      { start of I/O buffer (or NULL) }
  2476.     pchNext: PChar;        { pointer to next byte to read/write }
  2477.     pchEndRead: PChar;     { pointer to last valid byte to read }
  2478.     pchEndWrite: PChar;    { pointer to last byte to write }
  2479.     lBufOffset: Longint;     { disk offset of start of buffer }
  2480.  
  2481.     { fields maintained by I/O procedure }
  2482.     lDiskOffset: Longint;    { disk offset of next read or write }
  2483.     adwInfo: array[0..2] of DWORD;     { data specific to type of MMIOPROC }
  2484.  
  2485.     { other fields maintained by MMIO }
  2486.     dwReserved1: DWORD;    { reserved for MMIO use }
  2487.     dwReserved2: DWORD;    { reserved for MMIO use }
  2488.     hmmio: HMMIO;          { handle to open file }
  2489.   end;
  2490.   TMMIOInfo = _MMIOINFO;
  2491.   {$EXTERNALSYM MMIOINFO}
  2492.   MMIOINFO = _MMIOINFO;
  2493.  
  2494.  
  2495. { RIFF chunk information data structure }
  2496. type
  2497.  
  2498.   PMMCKInfo = ^TMMCKInfo;
  2499.   {$EXTERNALSYM _MMCKINFO}
  2500.   _MMCKINFO = record
  2501.     ckid: FOURCC;           { chunk ID }
  2502.     cksize: DWORD;         { chunk size }
  2503.     fccType: FOURCC;        { form type or list type }
  2504.     dwDataOffset: DWORD;   { offset of data portion of chunk }
  2505.     dwFlags: DWORD;        { flags used by MMIO functions }
  2506.   end;
  2507.   TMMCKInfo = _MMCKINFO;
  2508.   {$EXTERNALSYM MMCKINFO}
  2509.   MMCKINFO = _MMCKINFO;
  2510.  
  2511. { bit field masks }
  2512. const
  2513.   {$EXTERNALSYM MMIO_RWMODE}
  2514.   MMIO_RWMODE     = $00000003;      { open file for reading/writing/both }
  2515.   {$EXTERNALSYM MMIO_SHAREMODE}
  2516.   MMIO_SHAREMODE  = $00000070;      { file sharing mode number }
  2517.  
  2518. { constants for dwFlags field of MMIOINFO }
  2519. const
  2520.   {$EXTERNALSYM MMIO_CREATE}
  2521.   MMIO_CREATE    = $00001000;     { create new file (or truncate file) }
  2522.   {$EXTERNALSYM MMIO_PARSE}
  2523.   MMIO_PARSE     = $00000100;     { parse new file returning path }
  2524.   {$EXTERNALSYM MMIO_DELETE}
  2525.   MMIO_DELETE    = $00000200;     { create new file (or truncate file) }
  2526.   {$EXTERNALSYM MMIO_EXIST}
  2527.   MMIO_EXIST     = $00004000;     { checks for existence of file }
  2528.   {$EXTERNALSYM MMIO_ALLOCBUF}
  2529.   MMIO_ALLOCBUF  = $00010000;     { mmioOpen() should allocate a buffer }
  2530.   {$EXTERNALSYM MMIO_GETTEMP}
  2531.   MMIO_GETTEMP   = $00020000;     { mmioOpen() should retrieve temp name }
  2532.  
  2533. const
  2534.   {$EXTERNALSYM MMIO_DIRTY}
  2535.   MMIO_DIRTY     = $10000000;     { I/O buffer is dirty }
  2536.  
  2537. { read/write mode numbers (bit field MMIO_RWMODE) }
  2538. const
  2539.   {$EXTERNALSYM MMIO_READ}
  2540.   MMIO_READ       = $00000000;      { open file for reading only }
  2541.   {$EXTERNALSYM MMIO_WRITE}
  2542.   MMIO_WRITE      = $00000001;      { open file for writing only }
  2543.   {$EXTERNALSYM MMIO_READWRITE}
  2544.   MMIO_READWRITE  = $00000002;      { open file for reading and writing }
  2545.  
  2546. { share mode numbers (bit field MMIO_SHAREMODE) }
  2547. const
  2548.   {$EXTERNALSYM MMIO_COMPAT}
  2549.   MMIO_COMPAT     = $00000000;      { compatibility mode }
  2550.   {$EXTERNALSYM MMIO_EXCLUSIVE}
  2551.   MMIO_EXCLUSIVE  = $00000010;      { exclusive-access mode }
  2552.   {$EXTERNALSYM MMIO_DENYWRITE}
  2553.   MMIO_DENYWRITE  = $00000020;      { deny writing to other processes }
  2554.   {$EXTERNALSYM MMIO_DENYREAD}
  2555.   MMIO_DENYREAD   = $00000030;      { deny reading to other processes }
  2556.   {$EXTERNALSYM MMIO_DENYNONE}
  2557.   MMIO_DENYNONE   = $00000040;      { deny nothing to other processes }
  2558.  
  2559. { various MMIO flags }
  2560. const
  2561.   {$EXTERNALSYM MMIO_FHOPEN}
  2562.   MMIO_FHOPEN             = $0010;  { mmioClose: keep file handle open }
  2563.   {$EXTERNALSYM MMIO_EMPTYBUF}
  2564.   MMIO_EMPTYBUF           = $0010;  { mmioFlush: empty the I/O buffer }
  2565.   {$EXTERNALSYM MMIO_TOUPPER}
  2566.   MMIO_TOUPPER            = $0010;  { mmioStringToFOURCC: to u-case }
  2567.   {$EXTERNALSYM MMIO_INSTALLPROC}
  2568.   MMIO_INSTALLPROC    = $00010000;  { mmioInstallIOProc: install MMIOProc }
  2569.   {$EXTERNALSYM MMIO_GLOBALPROC}
  2570.   MMIO_GLOBALPROC     = $10000000;  { mmioInstallIOProc: install globally }
  2571.   {$EXTERNALSYM MMIO_REMOVEPROC}
  2572.   MMIO_REMOVEPROC     = $00020000;  { mmioInstallIOProc: remove MMIOProc }
  2573.   {$EXTERNALSYM MMIO_UNICODEPROC}
  2574.   MMIO_UNICODEPROC    = $01000000;  { mmioInstallIOProc: Unicode MMIOProc }
  2575.   {$EXTERNALSYM MMIO_FINDPROC}
  2576.   MMIO_FINDPROC       = $00040000;  { mmioInstallIOProc: find an MMIOProc }
  2577.   {$EXTERNALSYM MMIO_FINDCHUNK}
  2578.   MMIO_FINDCHUNK          = $0010;  { mmioDescend: find a chunk by ID }
  2579.   {$EXTERNALSYM MMIO_FINDRIFF}
  2580.   MMIO_FINDRIFF           = $0020;  { mmioDescend: find a LIST chunk }
  2581.   {$EXTERNALSYM MMIO_FINDLIST}
  2582.   MMIO_FINDLIST           = $0040;  { mmioDescend: find a RIFF chunk }
  2583.   {$EXTERNALSYM MMIO_CREATERIFF}
  2584.   MMIO_CREATERIFF         = $0020;  { mmioCreateChunk: make a LIST chunk }
  2585.   {$EXTERNALSYM MMIO_CREATELIST}
  2586.   MMIO_CREATELIST         = $0040;  { mmioCreateChunk: make a RIFF chunk }
  2587.  
  2588.  
  2589. { message numbers for MMIOPROC I/O procedure functions }
  2590. const
  2591.   {$EXTERNALSYM MMIOM_READ}
  2592.   MMIOM_READ      = MMIO_READ;       { read }
  2593.   {$EXTERNALSYM MMIOM_WRITE}
  2594.   MMIOM_WRITE    = MMIO_WRITE;       { write }
  2595.   {$EXTERNALSYM MMIOM_SEEK}
  2596.   MMIOM_SEEK              = 2;       { seek to a new position in file }
  2597.   {$EXTERNALSYM MMIOM_OPEN}
  2598.   MMIOM_OPEN              = 3;       { open file }
  2599.   {$EXTERNALSYM MMIOM_CLOSE}
  2600.   MMIOM_CLOSE             = 4;       { close file }
  2601.   {$EXTERNALSYM MMIOM_WRITEFLUSH}
  2602.   MMIOM_WRITEFLUSH        = 5;       { write and flush }
  2603.  
  2604. const
  2605.   {$EXTERNALSYM MMIOM_RENAME}
  2606.   MMIOM_RENAME            = 6;       { rename specified file }
  2607.  
  2608.   {$EXTERNALSYM MMIOM_USER}
  2609.   MMIOM_USER         = $8000;       { beginning of user-defined messages }
  2610.  
  2611. { standard four character codes }
  2612. const
  2613.   {$EXTERNALSYM FOURCC_RIFF}
  2614.   FOURCC_RIFF = $46464952;   { 'RIFF' }
  2615.   {$EXTERNALSYM FOURCC_LIST}
  2616.   FOURCC_LIST = $5453494C;   { 'LIST' }
  2617.  
  2618. { four character codes used to identify standard built-in I/O procedures }
  2619. const
  2620.   {$EXTERNALSYM FOURCC_DOS}
  2621.   FOURCC_DOS  = $20532F44;   { 'DOS '}
  2622.   {$EXTERNALSYM FOURCC_MEM}
  2623.   FOURCC_MEM  = $204D454D;   { 'MEM '}
  2624.  
  2625. { flags for mmioSeek() }
  2626. const
  2627.   {$EXTERNALSYM SEEK_SET}
  2628.   SEEK_SET        = 0;               { seek to an absolute position }
  2629.   {$EXTERNALSYM SEEK_CUR}
  2630.   SEEK_CUR        = 1;               { seek relative to current position }
  2631.   {$EXTERNALSYM SEEK_END}
  2632.   SEEK_END        = 2;               { seek relative to end of file }
  2633.  
  2634. { other constants }
  2635. const
  2636.   {$EXTERNALSYM MMIO_DEFAULTBUFFER}
  2637.   MMIO_DEFAULTBUFFER      = 8192;    { default buffer size }
  2638.  
  2639. { MMIO function prototypes }
  2640. {$EXTERNALSYM mmioStringToFOURCCA}
  2641. function mmioStringToFOURCCA(sz: PAnsiChar; uFlags: UINT): FOURCC; stdcall;
  2642. {$EXTERNALSYM mmioStringToFOURCCW}
  2643. function mmioStringToFOURCCW(sz: PWideChar; uFlags: UINT): FOURCC; stdcall;
  2644. {$EXTERNALSYM mmioStringToFOURCC}
  2645. function mmioStringToFOURCC(sz: PChar; uFlags: UINT): FOURCC; stdcall;
  2646. {$EXTERNALSYM mmioInstallIOProcA}
  2647. function mmioInstallIOProcA(fccIOProc: FOURCC; pIOProc: TFNMMIOProc;
  2648.   dwFlags: DWORD): TFNMMIOProc; stdcall;
  2649. {$EXTERNALSYM mmioInstallIOProcW}
  2650. function mmioInstallIOProcW(fccIOProc: FOURCC; pIOProc: TFNMMIOProc;
  2651.   dwFlags: DWORD): TFNMMIOProc; stdcall;
  2652. {$EXTERNALSYM mmioInstallIOProc}
  2653. function mmioInstallIOProc(fccIOProc: FOURCC; pIOProc: TFNMMIOProc;
  2654.   dwFlags: DWORD): TFNMMIOProc; stdcall;
  2655. {$EXTERNALSYM mmioOpenA}
  2656. function mmioOpenA(szFileName: PChar; lpmmioinfo: PMMIOInfo;
  2657.   dwOpenFlags: DWORD): HMMIO; stdcall;
  2658. {$EXTERNALSYM mmioOpenW}
  2659. function mmioOpenW(szFileName: PChar; lpmmioinfo: PMMIOInfo;
  2660.   dwOpenFlags: DWORD): HMMIO; stdcall;
  2661. {$EXTERNALSYM mmioOpen}
  2662. function mmioOpen(szFileName: PChar; lpmmioinfo: PMMIOInfo;
  2663.   dwOpenFlags: DWORD): HMMIO; stdcall;
  2664. {$EXTERNALSYM mmioRenameA}
  2665. function mmioRenameA(szFileName, szNewFileName: PAnsiChar;
  2666.   lpmmioinfo: PMMIOInfo; dwRenameFlags: DWORD): MMRESULT; stdcall;
  2667. {$EXTERNALSYM mmioRenameW}
  2668. function mmioRenameW(szFileName, szNewFileName: PWideChar;
  2669.   lpmmioinfo: PMMIOInfo; dwRenameFlags: DWORD): MMRESULT; stdcall;
  2670. {$EXTERNALSYM mmioRename}
  2671. function mmioRename(szFileName, szNewFileName: PChar;
  2672.   lpmmioinfo: PMMIOInfo; dwRenameFlags: DWORD): MMRESULT; stdcall;
  2673. {$EXTERNALSYM mmioClose}
  2674. function mmioClose(hmmio: HMMIO; uFlags: UINT): MMRESULT; stdcall;
  2675. {$EXTERNALSYM mmioRead}
  2676. function mmioRead(hmmio: HMMIO; pch: PChar; cch: Longint): Longint; stdcall;
  2677. {$EXTERNALSYM mmioWrite}
  2678. function mmioWrite(hmmio: HMMIO; pch: PChar; cch: Longint): Longint; stdcall;
  2679. {$EXTERNALSYM mmioSeek}
  2680. function mmioSeek(hmmio: HMMIO; lOffset: Longint; 
  2681.   iOrigin: Integer): Longint; stdcall;
  2682. {$EXTERNALSYM mmioGetInfo}
  2683. function mmioGetInfo(hmmio: HMMIO; lpmmioinfo: PMMIOInfo; uFlags: UINT): MMRESULT; stdcall;
  2684. {$EXTERNALSYM mmioSetInfo}
  2685. function mmioSetInfo(hmmio: HMMIO; lpmmioinfo: PMMIOInfo; uFlags: UINT): MMRESULT; stdcall;
  2686. {$EXTERNALSYM mmioSetBuffer}
  2687. function mmioSetBuffer(hmmio: HMMIO; pchBuffer: PChar; cchBuffer: Longint;
  2688.   uFlags: Word): MMRESULT; stdcall;
  2689. {$EXTERNALSYM mmioFlush}
  2690. function mmioFlush(hmmio: HMMIO; uFlags: UINT): MMRESULT; stdcall;
  2691. {$EXTERNALSYM mmioAdvance}
  2692. function mmioAdvance(hmmio: HMMIO; lpmmioinfo: PMMIOInfo; uFlags: UINT): MMRESULT; stdcall;
  2693. {$EXTERNALSYM mmioSendMessage}
  2694. function mmioSendMessage(hmmio: HMMIO; uMessage: UINT;
  2695.   lParam1, lParam2: DWORD): Longint; stdcall;
  2696. {$EXTERNALSYM mmioDescend}
  2697. function mmioDescend(hmmio: HMMIO; lpck: PMMCKInfo;
  2698.   lpckParent: PMMCKInfo; uFlags: UINT): MMRESULT; stdcall;
  2699. {$EXTERNALSYM mmioAscend}
  2700. function mmioAscend(hmmio: HMMIO; lpck: PMMCKInfo; uFlags: UINT): MMRESULT; stdcall;
  2701. {$EXTERNALSYM mmioCreateChunk}
  2702. function mmioCreateChunk(hmmio: HMMIO; lpck: PMMCKInfo; uFlags: UINT): MMRESULT; stdcall;
  2703.  
  2704.  
  2705. {***************************************************************************
  2706.  
  2707.                             MCI support
  2708.  
  2709. ***************************************************************************}
  2710.  
  2711. type
  2712.   {$EXTERNALSYM MCIERROR}
  2713.   MCIERROR = DWORD;     { error return code, 0 means no error }
  2714.   {$EXTERNALSYM MCIDEVICEID}
  2715.   MCIDEVICEID = UINT;   { MCI device ID type }
  2716.  
  2717.   TFNYieldProc = function(mciId: MCIDEVICEID; dwYieldData: DWORD): UINT stdcall;
  2718.  
  2719. { MCI function prototypes }
  2720. {$EXTERNALSYM mciSendCommandA}
  2721. function mciSendCommandA(mciId: MCIDEVICEID; uMessage: UINT;
  2722.   dwParam1, dwParam2: DWORD): MCIERROR; stdcall;
  2723. {$EXTERNALSYM mciSendCommandW}
  2724. function mciSendCommandW(mciId: MCIDEVICEID; uMessage: UINT;
  2725.   dwParam1, dwParam2: DWORD): MCIERROR; stdcall;
  2726. {$EXTERNALSYM mciSendCommand}
  2727. function mciSendCommand(mciId: MCIDEVICEID; uMessage: UINT;
  2728.   dwParam1, dwParam2: DWORD): MCIERROR; stdcall;
  2729. {$EXTERNALSYM mciSendStringA}
  2730. function mciSendStringA(lpstrCommand, lpstrReturnString: PAnsiChar;
  2731.   uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
  2732. {$EXTERNALSYM mciSendStringW}
  2733. function mciSendStringW(lpstrCommand, lpstrReturnString: PWideChar;
  2734.   uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
  2735. {$EXTERNALSYM mciSendString}
  2736. function mciSendString(lpstrCommand, lpstrReturnString: PChar;
  2737.   uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
  2738. {$EXTERNALSYM mciGetDeviceIDA}
  2739. function mciGetDeviceIDA(pszDevice: PAnsiChar): MCIDEVICEID; stdcall;
  2740. {$EXTERNALSYM mciGetDeviceIDW}
  2741. function mciGetDeviceIDW(pszDevice: PWideChar): MCIDEVICEID; stdcall;
  2742. {$EXTERNALSYM mciGetDeviceID}
  2743. function mciGetDeviceID(pszDevice: PChar): MCIDEVICEID; stdcall;
  2744. {$EXTERNALSYM mciGetDeviceIDFromElementIDA}
  2745. function mciGetDeviceIDFromElementIDA(dwElementID: DWORD; lpstrType: PAnsiChar): MCIDEVICEID; stdcall;
  2746. {$EXTERNALSYM mciGetDeviceIDFromElementIDW}
  2747. function mciGetDeviceIDFromElementIDW(dwElementID: DWORD; lpstrType: PWideChar): MCIDEVICEID; stdcall;
  2748. {$EXTERNALSYM mciGetDeviceIDFromElementID}
  2749. function mciGetDeviceIDFromElementID(dwElementID: DWORD; lpstrType: PChar): MCIDEVICEID; stdcall;
  2750. {$EXTERNALSYM mciGetErrorStringA}
  2751. function mciGetErrorStringA(mcierr: MCIERROR; pszText: PAnsiChar; uLength: UINT): BOOL; stdcall;
  2752. {$EXTERNALSYM mciGetErrorStringW}
  2753. function mciGetErrorStringW(mcierr: MCIERROR; pszText: PWideChar; uLength: UINT): BOOL; stdcall;
  2754. {$EXTERNALSYM mciGetErrorString}
  2755. function mciGetErrorString(mcierr: MCIERROR; pszText: PChar; uLength: UINT): BOOL; stdcall;
  2756. {$EXTERNALSYM mciSetYieldProc}
  2757. function mciSetYieldProc(mcierr: MCIERROR; fpYieldProc: TFNYieldProc;
  2758.   dwYieldData: DWORD): BOOL; stdcall;
  2759. {$EXTERNALSYM mciGetCreatorTask}
  2760. function mciGetCreatorTask(mcierr: MCIERROR): HTASK; stdcall;
  2761. {$EXTERNALSYM mciGetYieldProc}
  2762. function mciGetYieldProc(mcierr: MCIERROR; lpdwYieldData: PDWORD): TFNYieldProc; stdcall;
  2763. {$EXTERNALSYM mciExecute}
  2764. function mciExecute(pszCommand: LPCSTR): BOOL; stdcall;
  2765.  
  2766.  
  2767. { MCI error return values }
  2768. const
  2769.   {$EXTERNALSYM MCIERR_INVALID_DEVICE_ID}
  2770.   MCIERR_INVALID_DEVICE_ID        = MCIERR_BASE + 1;
  2771.   {$EXTERNALSYM MCIERR_UNRECOGNIZED_KEYWORD}
  2772.   MCIERR_UNRECOGNIZED_KEYWORD     = MCIERR_BASE + 3;
  2773.   {$EXTERNALSYM MCIERR_UNRECOGNIZED_COMMAND}
  2774.   MCIERR_UNRECOGNIZED_COMMAND     = MCIERR_BASE + 5;
  2775.   {$EXTERNALSYM MCIERR_HARDWARE}
  2776.   MCIERR_HARDWARE                 = MCIERR_BASE + 6;
  2777.   {$EXTERNALSYM MCIERR_INVALID_DEVICE_NAME}
  2778.   MCIERR_INVALID_DEVICE_NAME      = MCIERR_BASE + 7;
  2779.   {$EXTERNALSYM MCIERR_OUT_OF_MEMORY}
  2780.   MCIERR_OUT_OF_MEMORY            = MCIERR_BASE + 8;
  2781.   {$EXTERNALSYM MCIERR_DEVICE_OPEN}
  2782.   MCIERR_DEVICE_OPEN              = MCIERR_BASE + 9;
  2783.   {$EXTERNALSYM MCIERR_CANNOT_LOAD_DRIVER}
  2784.   MCIERR_CANNOT_LOAD_DRIVER       = MCIERR_BASE + 10;
  2785.   {$EXTERNALSYM MCIERR_MISSING_COMMAND_STRING}
  2786.   MCIERR_MISSING_COMMAND_STRING   = MCIERR_BASE + 11;
  2787.   {$EXTERNALSYM MCIERR_PARAM_OVERFLOW}
  2788.   MCIERR_PARAM_OVERFLOW           = MCIERR_BASE + 12;
  2789.   {$EXTERNALSYM MCIERR_MISSING_STRING_ARGUMENT}
  2790.   MCIERR_MISSING_STRING_ARGUMENT  = MCIERR_BASE + 13;
  2791.   {$EXTERNALSYM MCIERR_BAD_INTEGER}
  2792.   MCIERR_BAD_INTEGER              = MCIERR_BASE + 14;
  2793.   {$EXTERNALSYM MCIERR_PARSER_INTERNAL}
  2794.   MCIERR_PARSER_INTERNAL          = MCIERR_BASE + 15;
  2795.   {$EXTERNALSYM MCIERR_DRIVER_INTERNAL}
  2796.   MCIERR_DRIVER_INTERNAL          = MCIERR_BASE + 16;
  2797.   {$EXTERNALSYM MCIERR_MISSING_PARAMETER}
  2798.   MCIERR_MISSING_PARAMETER        = MCIERR_BASE + 17;
  2799.   {$EXTERNALSYM MCIERR_UNSUPPORTED_FUNCTION}
  2800.   MCIERR_UNSUPPORTED_FUNCTION     = MCIERR_BASE + 18;
  2801.   {$EXTERNALSYM MCIERR_FILE_NOT_FOUND}
  2802.   MCIERR_FILE_NOT_FOUND           = MCIERR_BASE + 19;
  2803.   {$EXTERNALSYM MCIERR_DEVICE_NOT_READY}
  2804.   MCIERR_DEVICE_NOT_READY         = MCIERR_BASE + 20;
  2805.   {$EXTERNALSYM MCIERR_INTERNAL}
  2806.   MCIERR_INTERNAL                 = MCIERR_BASE + 21;
  2807.   {$EXTERNALSYM MCIERR_DRIVER}
  2808.   MCIERR_DRIVER                   = MCIERR_BASE + 22;
  2809.   {$EXTERNALSYM MCIERR_CANNOT_USE_ALL}
  2810.   MCIERR_CANNOT_USE_ALL           = MCIERR_BASE + 23;
  2811.   {$EXTERNALSYM MCIERR_MULTIPLE}
  2812.   MCIERR_MULTIPLE                 = MCIERR_BASE + 24;
  2813.   {$EXTERNALSYM MCIERR_EXTENSION_NOT_FOUND}
  2814.   MCIERR_EXTENSION_NOT_FOUND      = MCIERR_BASE + 25;
  2815.   {$EXTERNALSYM MCIERR_OUTOFRANGE}
  2816.   MCIERR_OUTOFRANGE               = MCIERR_BASE + 26;
  2817.   {$EXTERNALSYM MCIERR_FLAGS_NOT_COMPATIBLE}
  2818.   MCIERR_FLAGS_NOT_COMPATIBLE     = MCIERR_BASE + 28;
  2819.   {$EXTERNALSYM MCIERR_FILE_NOT_SAVED}
  2820.   MCIERR_FILE_NOT_SAVED           = MCIERR_BASE + 30;
  2821.   {$EXTERNALSYM MCIERR_DEVICE_TYPE_REQUIRED}
  2822.   MCIERR_DEVICE_TYPE_REQUIRED     = MCIERR_BASE + 31;
  2823.   {$EXTERNALSYM MCIERR_DEVICE_LOCKED}
  2824.   MCIERR_DEVICE_LOCKED            = MCIERR_BASE + 32;
  2825.   {$EXTERNALSYM MCIERR_DUPLICATE_ALIAS}
  2826.   MCIERR_DUPLICATE_ALIAS          = MCIERR_BASE + 33;
  2827.   {$EXTERNALSYM MCIERR_BAD_CONSTANT}
  2828.   MCIERR_BAD_CONSTANT             = MCIERR_BASE + 34;
  2829.   {$EXTERNALSYM MCIERR_MUST_USE_SHAREABLE}
  2830.   MCIERR_MUST_USE_SHAREABLE       = MCIERR_BASE + 35;
  2831.   {$EXTERNALSYM MCIERR_MISSING_DEVICE_NAME}
  2832.   MCIERR_MISSING_DEVICE_NAME      = MCIERR_BASE + 36;
  2833.   {$EXTERNALSYM MCIERR_BAD_TIME_FORMAT}
  2834.   MCIERR_BAD_TIME_FORMAT          = MCIERR_BASE + 37;
  2835.   {$EXTERNALSYM MCIERR_NO_CLOSING_QUOTE}
  2836.   MCIERR_NO_CLOSING_QUOTE         = MCIERR_BASE + 38;
  2837.   {$EXTERNALSYM MCIERR_DUPLICATE_FLAGS}
  2838.   MCIERR_DUPLICATE_FLAGS          = MCIERR_BASE + 39;
  2839.   {$EXTERNALSYM MCIERR_INVALID_FILE}
  2840.   MCIERR_INVALID_FILE             = MCIERR_BASE + 40;
  2841.   {$EXTERNALSYM MCIERR_NULL_PARAMETER_BLOCK}
  2842.   MCIERR_NULL_PARAMETER_BLOCK     = MCIERR_BASE + 41;
  2843.   {$EXTERNALSYM MCIERR_UNNAMED_RESOURCE}
  2844.   MCIERR_UNNAMED_RESOURCE         = MCIERR_BASE + 42;
  2845.   {$EXTERNALSYM MCIERR_NEW_REQUIRES_ALIAS}
  2846.   MCIERR_NEW_REQUIRES_ALIAS       = MCIERR_BASE + 43;
  2847.   {$EXTERNALSYM MCIERR_NOTIFY_ON_AUTO_OPEN}
  2848.   MCIERR_NOTIFY_ON_AUTO_OPEN      = MCIERR_BASE + 44;
  2849.   {$EXTERNALSYM MCIERR_NO_ELEMENT_ALLOWED}
  2850.   MCIERR_NO_ELEMENT_ALLOWED       = MCIERR_BASE + 45;
  2851.   {$EXTERNALSYM MCIERR_NONAPPLICABLE_FUNCTION}
  2852.   MCIERR_NONAPPLICABLE_FUNCTION   = MCIERR_BASE + 46;
  2853.   {$EXTERNALSYM MCIERR_ILLEGAL_FOR_AUTO_OPEN}
  2854.   MCIERR_ILLEGAL_FOR_AUTO_OPEN    = MCIERR_BASE + 47;
  2855.   {$EXTERNALSYM MCIERR_FILENAME_REQUIRED}
  2856.   MCIERR_FILENAME_REQUIRED        = MCIERR_BASE + 48;
  2857.   {$EXTERNALSYM MCIERR_EXTRA_CHARACTERS}
  2858.   MCIERR_EXTRA_CHARACTERS         = MCIERR_BASE + 49;
  2859.   {$EXTERNALSYM MCIERR_DEVICE_NOT_INSTALLED}
  2860.   MCIERR_DEVICE_NOT_INSTALLED     = MCIERR_BASE + 50;
  2861.   {$EXTERNALSYM MCIERR_GET_CD}
  2862.   MCIERR_GET_CD                   = MCIERR_BASE + 51;
  2863.   {$EXTERNALSYM MCIERR_SET_CD}
  2864.   MCIERR_SET_CD                   = MCIERR_BASE + 52;
  2865.   {$EXTERNALSYM MCIERR_SET_DRIVE}
  2866.   MCIERR_SET_DRIVE                = MCIERR_BASE + 53;
  2867.   {$EXTERNALSYM MCIERR_DEVICE_LENGTH}
  2868.   MCIERR_DEVICE_LENGTH            = MCIERR_BASE + 54;
  2869.   {$EXTERNALSYM MCIERR_DEVICE_ORD_LENGTH}
  2870.   MCIERR_DEVICE_ORD_LENGTH        = MCIERR_BASE + 55;
  2871.   {$EXTERNALSYM MCIERR_NO_INTEGER}
  2872.   MCIERR_NO_INTEGER               = MCIERR_BASE + 56;
  2873.  
  2874. const
  2875.   {$EXTERNALSYM MCIERR_WAVE_OUTPUTSINUSE}
  2876.   MCIERR_WAVE_OUTPUTSINUSE        = MCIERR_BASE + 64;
  2877.   {$EXTERNALSYM MCIERR_WAVE_SETOUTPUTINUSE}
  2878.   MCIERR_WAVE_SETOUTPUTINUSE      = MCIERR_BASE + 65;
  2879.   {$EXTERNALSYM MCIERR_WAVE_INPUTSINUSE}
  2880.   MCIERR_WAVE_INPUTSINUSE         = MCIERR_BASE + 66;
  2881.   {$EXTERNALSYM MCIERR_WAVE_SETINPUTINUSE}
  2882.   MCIERR_WAVE_SETINPUTINUSE       = MCIERR_BASE + 67;
  2883.   {$EXTERNALSYM MCIERR_WAVE_OUTPUTUNSPECIFIED}
  2884.   MCIERR_WAVE_OUTPUTUNSPECIFIED   = MCIERR_BASE + 68;
  2885.   {$EXTERNALSYM MCIERR_WAVE_INPUTUNSPECIFIED}
  2886.   MCIERR_WAVE_INPUTUNSPECIFIED    = MCIERR_BASE + 69;
  2887.   {$EXTERNALSYM MCIERR_WAVE_OUTPUTSUNSUITABLE}
  2888.   MCIERR_WAVE_OUTPUTSUNSUITABLE   = MCIERR_BASE + 70;
  2889.   {$EXTERNALSYM MCIERR_WAVE_SETOUTPUTUNSUITABLE}
  2890.   MCIERR_WAVE_SETOUTPUTUNSUITABLE = MCIERR_BASE + 71;
  2891.   {$EXTERNALSYM MCIERR_WAVE_INPUTSUNSUITABLE}
  2892.   MCIERR_WAVE_INPUTSUNSUITABLE    = MCIERR_BASE + 72;
  2893.   {$EXTERNALSYM MCIERR_WAVE_SETINPUTUNSUITABLE}
  2894.   MCIERR_WAVE_SETINPUTUNSUITABLE  = MCIERR_BASE + 73;
  2895.  
  2896.   {$EXTERNALSYM MCIERR_SEQ_DIV_INCOMPATIBLE}
  2897.   MCIERR_SEQ_DIV_INCOMPATIBLE     = MCIERR_BASE + 80;
  2898.   {$EXTERNALSYM MCIERR_SEQ_PORT_INUSE}
  2899.   MCIERR_SEQ_PORT_INUSE           = MCIERR_BASE + 81;
  2900.   {$EXTERNALSYM MCIERR_SEQ_PORT_NONEXISTENT}
  2901.   MCIERR_SEQ_PORT_NONEXISTENT     = MCIERR_BASE + 82;
  2902.   {$EXTERNALSYM MCIERR_SEQ_PORT_MAPNODEVICE}
  2903.   MCIERR_SEQ_PORT_MAPNODEVICE     = MCIERR_BASE + 83;
  2904.   {$EXTERNALSYM MCIERR_SEQ_PORT_MISCERROR}
  2905.   MCIERR_SEQ_PORT_MISCERROR       = MCIERR_BASE + 84;
  2906.   {$EXTERNALSYM MCIERR_SEQ_TIMER}
  2907.   MCIERR_SEQ_TIMER                = MCIERR_BASE + 85;
  2908.   {$EXTERNALSYM MCIERR_SEQ_PORTUNSPECIFIED}
  2909.   MCIERR_SEQ_PORTUNSPECIFIED      = MCIERR_BASE + 86;
  2910.   {$EXTERNALSYM MCIERR_SEQ_NOMIDIPRESENT}
  2911.   MCIERR_SEQ_NOMIDIPRESENT        = MCIERR_BASE + 87;
  2912.  
  2913.   {$EXTERNALSYM MCIERR_NO_WINDOW}
  2914.   MCIERR_NO_WINDOW                = MCIERR_BASE + 90;
  2915.   {$EXTERNALSYM MCIERR_CREATEWINDOW}
  2916.   MCIERR_CREATEWINDOW             = MCIERR_BASE + 91;
  2917.   {$EXTERNALSYM MCIERR_FILE_READ}
  2918.   MCIERR_FILE_READ                = MCIERR_BASE + 92;
  2919.   {$EXTERNALSYM MCIERR_FILE_WRITE}
  2920.   MCIERR_FILE_WRITE               = MCIERR_BASE + 93;
  2921.  
  2922.   {$EXTERNALSYM MCIERR_NO_IDENTITY}
  2923.   MCIERR_NO_IDENTITY              = MCIERR_BASE + 94;
  2924.  
  2925. { all custom device driver errors must be >= this value }
  2926. const
  2927.   {$EXTERNALSYM MCIERR_CUSTOM_DRIVER_BASE}
  2928.   MCIERR_CUSTOM_DRIVER_BASE       = mcierr_Base + 256;
  2929.  
  2930. { MCI command message identifiers }
  2931. const
  2932.   {$EXTERNALSYM MCI_OPEN}
  2933.   MCI_OPEN       = $0803;
  2934.   {$EXTERNALSYM MCI_CLOSE}
  2935.   MCI_CLOSE      = $0804;
  2936.   {$EXTERNALSYM MCI_ESCAPE}
  2937.   MCI_ESCAPE     = $0805;
  2938.   {$EXTERNALSYM MCI_PLAY}
  2939.   MCI_PLAY       = $0806;
  2940.   {$EXTERNALSYM MCI_SEEK}
  2941.   MCI_SEEK       = $0807;
  2942.   {$EXTERNALSYM MCI_STOP}
  2943.   MCI_STOP       = $0808;
  2944.   {$EXTERNALSYM MCI_PAUSE}
  2945.   MCI_PAUSE      = $0809;
  2946.   {$EXTERNALSYM MCI_INFO}
  2947.   MCI_INFO       = $080A;
  2948.   MCI_GETDEVCAPs = $080B;
  2949.   {$EXTERNALSYM MCI_SPIN}
  2950.   MCI_SPIN       = $080C;
  2951.   {$EXTERNALSYM MCI_SET}
  2952.   MCI_SET        = $080D;
  2953.   {$EXTERNALSYM MCI_STEP}
  2954.   MCI_STEP       = $080E;
  2955.   {$EXTERNALSYM MCI_RECORD}
  2956.   MCI_RECORD     = $080F;
  2957.   {$EXTERNALSYM MCI_SYSINFO}
  2958.   MCI_SYSINFO    = $0810;
  2959.   {$EXTERNALSYM MCI_BREAK}
  2960.   MCI_BREAK      = $0811;
  2961.   MCI_SOUND      = $0812;
  2962.   {$EXTERNALSYM MCI_SAVE}
  2963.   MCI_SAVE       = $0813;
  2964.   {$EXTERNALSYM MCI_STATUS}
  2965.   MCI_STATUS     = $0814;
  2966.   {$EXTERNALSYM MCI_CUE}
  2967.   MCI_CUE        = $0830;
  2968.   {$EXTERNALSYM MCI_REALIZE}
  2969.   MCI_REALIZE    = $0840;
  2970.   {$EXTERNALSYM MCI_WINDOW}
  2971.   MCI_WINDOW     = $0841;
  2972.   {$EXTERNALSYM MCI_PUT}
  2973.   MCI_PUT        = $0842;
  2974.   {$EXTERNALSYM MCI_WHERE}
  2975.   MCI_WHERE      = $0843;
  2976.   {$EXTERNALSYM MCI_FREEZE}
  2977.   MCI_FREEZE     = $0844;
  2978.   {$EXTERNALSYM MCI_UNFREEZE}
  2979.   MCI_UNFREEZE   = $0845;
  2980.   {$EXTERNALSYM MCI_LOAD}
  2981.   MCI_LOAD       = $0850;
  2982.   {$EXTERNALSYM MCI_CUT}
  2983.   MCI_CUT        = $0851;
  2984.   {$EXTERNALSYM MCI_COPY}
  2985.   MCI_COPY       = $0852;
  2986.   {$EXTERNALSYM MCI_PASTE}
  2987.   MCI_PASTE      = $0853;
  2988.   {$EXTERNALSYM MCI_UPDATE}
  2989.   MCI_UPDATE     = $0854;
  2990.   {$EXTERNALSYM MCI_RESUME}
  2991.   MCI_RESUME     = $0855;
  2992.   {$EXTERNALSYM MCI_DELETE}
  2993.   MCI_DELETE     = $0856;
  2994.  
  2995. { all custom MCI command messages must be >= this value }
  2996. const
  2997.   {$EXTERNALSYM MCI_USER_MESSAGES}
  2998.   MCI_USER_MESSAGES               = $400 + drv_MCI_First;
  2999.   {$EXTERNALSYM MCI_LAST}
  3000.   MCI_LAST                        = $0FFF;
  3001.  
  3002. { device ID for "all devices" }
  3003. const
  3004.   {$EXTERNALSYM MCI_ALL_DEVICE_ID}
  3005.   MCI_ALL_DEVICE_ID               = UINT(-1);
  3006.  
  3007. { constants for predefined MCI device types }
  3008. const
  3009.   {$EXTERNALSYM MCI_DEVTYPE_VCR}
  3010.   MCI_DEVTYPE_VCR                 = MCI_STRING_OFFSET + 1;
  3011.   {$EXTERNALSYM MCI_DEVTYPE_VIDEODISC}
  3012.   MCI_DEVTYPE_VIDEODISC           = MCI_STRING_OFFSET + 2;
  3013.   {$EXTERNALSYM MCI_DEVTYPE_OVERLAY}
  3014.   MCI_DEVTYPE_OVERLAY             = MCI_STRING_OFFSET + 3;
  3015.   {$EXTERNALSYM MCI_DEVTYPE_CD_AUDIO}
  3016.   MCI_DEVTYPE_CD_AUDIO            = MCI_STRING_OFFSET + 4;
  3017.   {$EXTERNALSYM MCI_DEVTYPE_DAT}
  3018.   MCI_DEVTYPE_DAT                 = MCI_STRING_OFFSET + 5;
  3019.   {$EXTERNALSYM MCI_DEVTYPE_SCANNER}
  3020.   MCI_DEVTYPE_SCANNER             = MCI_STRING_OFFSET + 6;
  3021.   {$EXTERNALSYM MCI_DEVTYPE_ANIMATION}
  3022.   MCI_DEVTYPE_ANIMATION           = MCI_STRING_OFFSET + 7;
  3023.   {$EXTERNALSYM MCI_DEVTYPE_DIGITAL_VIDEO}
  3024.   MCI_DEVTYPE_DIGITAL_VIDEO       = MCI_STRING_OFFSET + 8;
  3025.   {$EXTERNALSYM MCI_DEVTYPE_OTHER}
  3026.   MCI_DEVTYPE_OTHER               = MCI_STRING_OFFSET + 9;
  3027.   {$EXTERNALSYM MCI_DEVTYPE_WAVEFORM_AUDIO}
  3028.   MCI_DEVTYPE_WAVEFORM_AUDIO      = MCI_STRING_OFFSET + 10;
  3029.   {$EXTERNALSYM MCI_DEVTYPE_SEQUENCER}
  3030.   MCI_DEVTYPE_SEQUENCER           = MCI_STRING_OFFSET + 11;
  3031.  
  3032.   {$EXTERNALSYM MCI_DEVTYPE_FIRST}
  3033.   MCI_DEVTYPE_FIRST              = MCI_DEVTYPE_VCR;
  3034.   {$EXTERNALSYM MCI_DEVTYPE_LAST}
  3035.   MCI_DEVTYPE_LAST               = MCI_DEVTYPE_SEQUENCER;
  3036.  
  3037.   {$EXTERNALSYM MCI_DEVTYPE_FIRST_USER}
  3038.   MCI_DEVTYPE_FIRST_USER         = 1000;
  3039.  
  3040. { return values for 'status mode' command }
  3041. const
  3042.   {$EXTERNALSYM MCI_MODE_NOT_READY}
  3043.   MCI_MODE_NOT_READY              = MCI_STRING_OFFSET + 12;
  3044.   {$EXTERNALSYM MCI_MODE_STOP}
  3045.   MCI_MODE_STOP                   = MCI_STRING_OFFSET + 13;
  3046.   {$EXTERNALSYM MCI_MODE_PLAY}
  3047.   MCI_MODE_PLAY                   = MCI_STRING_OFFSET + 14;
  3048.   {$EXTERNALSYM MCI_MODE_RECORD}
  3049.   MCI_MODE_RECORD                 = MCI_STRING_OFFSET + 15;
  3050.   {$EXTERNALSYM MCI_MODE_SEEK}
  3051.   MCI_MODE_SEEK                   = MCI_STRING_OFFSET + 16;
  3052.   {$EXTERNALSYM MCI_MODE_PAUSE}
  3053.   MCI_MODE_PAUSE                  = MCI_STRING_OFFSET + 17;
  3054.   {$EXTERNALSYM MCI_MODE_OPEN}
  3055.   MCI_MODE_OPEN                   = MCI_STRING_OFFSET + 18;
  3056.  
  3057. { constants used in 'set time format' and 'status time format' commands }
  3058. const
  3059.   {$EXTERNALSYM MCI_FORMAT_MILLISECONDS}
  3060.   MCI_FORMAT_MILLISECONDS         = 0;
  3061.   {$EXTERNALSYM MCI_FORMAT_HMS}
  3062.   MCI_FORMAT_HMS                  = 1;
  3063.   {$EXTERNALSYM MCI_FORMAT_MSF}
  3064.   MCI_FORMAT_MSF                  = 2;
  3065.   {$EXTERNALSYM MCI_FORMAT_FRAMES}
  3066.   MCI_FORMAT_FRAMES               = 3;
  3067.   {$EXTERNALSYM MCI_FORMAT_SMPTE_24}
  3068.   MCI_FORMAT_SMPTE_24             = 4;
  3069.   {$EXTERNALSYM MCI_FORMAT_SMPTE_25}
  3070.   MCI_FORMAT_SMPTE_25             = 5;
  3071.   {$EXTERNALSYM MCI_FORMAT_SMPTE_30}
  3072.   MCI_FORMAT_SMPTE_30             = 6;
  3073.   {$EXTERNALSYM MCI_FORMAT_SMPTE_30DROP}
  3074.   MCI_FORMAT_SMPTE_30DROP         = 7;
  3075.   {$EXTERNALSYM MCI_FORMAT_BYTES}
  3076.   MCI_FORMAT_BYTES                = 8;
  3077.   {$EXTERNALSYM MCI_FORMAT_SAMPLES}
  3078.   MCI_FORMAT_SAMPLES              = 9;
  3079.   {$EXTERNALSYM MCI_FORMAT_TMSF}
  3080.   MCI_FORMAT_TMSF                 = 10;
  3081.  
  3082. { MCI time format conversion macros }
  3083.  
  3084. function mci_MSF_Minute(msf: Longint): Byte;
  3085. function mci_MSF_Second(msf: Longint): Byte;
  3086. function mci_MSF_Frame(msf: Longint): Byte;
  3087. function mci_Make_MSF(m, s, f: Byte): Longint;
  3088. function mci_TMSF_Track(tmsf: Longint): Byte;
  3089. function mci_TMSF_Minute(tmsf: Longint): Byte;
  3090. function mci_TMSF_Second(tmsf: Longint): Byte;
  3091. function mci_TMSF_Frame(tmsf: Longint): Byte;
  3092. function mci_Make_TMSF(t, m, s, f: Byte): Longint;
  3093. function mci_HMS_Hour(hms: Longint): Byte;
  3094. function mci_HMS_Minute(hms: Longint): Byte;
  3095. function mci_HMS_Second(hms: Longint): Byte;
  3096. function mci_Make_HMS(h, m, s: Byte): Longint;
  3097.  
  3098. { flags for wParam of MM_MCINOTIFY message }
  3099. const
  3100.   {$EXTERNALSYM MCI_NOTIFY_SUCCESSFUL}
  3101.   MCI_NOTIFY_SUCCESSFUL           = $0001;
  3102.   {$EXTERNALSYM MCI_NOTIFY_SUPERSEDED}
  3103.   MCI_NOTIFY_SUPERSEDED           = $0002;
  3104.   {$EXTERNALSYM MCI_NOTIFY_ABORTED}
  3105.   MCI_NOTIFY_ABORTED              = $0004;
  3106.   {$EXTERNALSYM MCI_NOTIFY_FAILURE}
  3107.   MCI_NOTIFY_FAILURE              = $0008;
  3108.  
  3109. { common flags for dwFlags parameter of MCI command messages }
  3110. const
  3111.   {$EXTERNALSYM MCI_NOTIFY}
  3112.   MCI_NOTIFY                      = $00000001;
  3113.   {$EXTERNALSYM MCI_WAIT}
  3114.   MCI_WAIT                        = $00000002;
  3115.   {$EXTERNALSYM MCI_FROM}
  3116.   MCI_FROM                        = $00000004;
  3117.   {$EXTERNALSYM MCI_TO}
  3118.   MCI_TO                          = $00000008;
  3119.   {$EXTERNALSYM MCI_TRACK}
  3120.   MCI_TRACK                       = $00000010;
  3121.  
  3122. { flags for dwFlags parameter of MCI_OPEN command message }
  3123. const
  3124.   {$EXTERNALSYM MCI_OPEN_SHAREABLE}
  3125.   MCI_OPEN_SHAREABLE              = $00000100;
  3126.   {$EXTERNALSYM MCI_OPEN_ELEMENT}
  3127.   MCI_OPEN_ELEMENT                = $00000200;
  3128.   {$EXTERNALSYM MCI_OPEN_ALIAS}
  3129.   MCI_OPEN_ALIAS                  = $00000400;
  3130.   {$EXTERNALSYM MCI_OPEN_ELEMENT_ID}
  3131.   MCI_OPEN_ELEMENT_ID             = $00000800;
  3132.   {$EXTERNALSYM MCI_OPEN_TYPE_ID}
  3133.   MCI_OPEN_TYPE_ID                = $00001000;
  3134.   {$EXTERNALSYM MCI_OPEN_TYPE}
  3135.   MCI_OPEN_TYPE                   = $00002000;
  3136.  
  3137. { flags for dwFlags parameter of MCI_SEEK command message }
  3138. const
  3139.   {$EXTERNALSYM MCI_SEEK_TO_START}
  3140.   MCI_SEEK_TO_START               = $00000100;
  3141.   {$EXTERNALSYM MCI_SEEK_TO_END}
  3142.   MCI_SEEK_TO_END                 = $00000200;
  3143.  
  3144. { flags for dwFlags parameter of MCI_STATUS command message }
  3145. const
  3146.   {$EXTERNALSYM MCI_STATUS_ITEM}
  3147.   MCI_STATUS_ITEM                 = $00000100;
  3148.   {$EXTERNALSYM MCI_STATUS_START}
  3149.   MCI_STATUS_START                = $00000200;
  3150.  
  3151. { flags for dwItem field of the MCI_STATUS_PARMS parameter block }
  3152. const
  3153.   {$EXTERNALSYM MCI_STATUS_LENGTH}
  3154.   MCI_STATUS_LENGTH               = $00000001;
  3155.   {$EXTERNALSYM MCI_STATUS_POSITION}
  3156.   MCI_STATUS_POSITION             = $00000002;
  3157.   {$EXTERNALSYM MCI_STATUS_NUMBER_OF_TRACKS}
  3158.   MCI_STATUS_NUMBER_OF_TRACKS     = $00000003;
  3159.   {$EXTERNALSYM MCI_STATUS_MODE}
  3160.   MCI_STATUS_MODE                 = $00000004;
  3161.   {$EXTERNALSYM MCI_STATUS_MEDIA_PRESENT}
  3162.   MCI_STATUS_MEDIA_PRESENT        = $00000005;
  3163.   {$EXTERNALSYM MCI_STATUS_TIME_FORMAT}
  3164.   MCI_STATUS_TIME_FORMAT          = $00000006;
  3165.   {$EXTERNALSYM MCI_STATUS_READY}
  3166.   MCI_STATUS_READY                = $00000007;
  3167.   {$EXTERNALSYM MCI_STATUS_CURRENT_TRACK}
  3168.   MCI_STATUS_CURRENT_TRACK        = $00000008;
  3169.  
  3170. { flags for dwFlags parameter of MCI_INFO command message }
  3171. const
  3172.   {$EXTERNALSYM MCI_INFO_PRODUCT}
  3173.   MCI_INFO_PRODUCT                = $00000100;
  3174.   {$EXTERNALSYM MCI_INFO_FILE}
  3175.   MCI_INFO_FILE                   = $00000200;
  3176.   {$EXTERNALSYM MCI_INFO_MEDIA_UPC}
  3177.   MCI_INFO_MEDIA_UPC              = $00000400;
  3178.   {$EXTERNALSYM MCI_INFO_MEDIA_IDENTITY}
  3179.   MCI_INFO_MEDIA_IDENTITY         = $00000800;
  3180.   {$EXTERNALSYM MCI_INFO_NAME}
  3181.   MCI_INFO_NAME                   = $00001000;
  3182.   {$EXTERNALSYM MCI_INFO_COPYRIGHT}
  3183.   MCI_INFO_COPYRIGHT              = $00002000;
  3184.  
  3185. { flags for dwFlags parameter of MCI_GETDEVCAPS command message }
  3186. const
  3187.   {$EXTERNALSYM MCI_GETDEVCAPS_ITEM}
  3188.   MCI_GETDEVCAPS_ITEM             = $00000100;
  3189.  
  3190. { flags for dwItem field of the MCI_GETDEVCAPS_PARMS parameter block }
  3191. const
  3192.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_RECORD}
  3193.   MCI_GETDEVCAPS_CAN_RECORD       = $00000001;
  3194.   {$EXTERNALSYM MCI_GETDEVCAPS_HAS_AUDIO}
  3195.   MCI_GETDEVCAPS_HAS_AUDIO        = $00000002;
  3196.   {$EXTERNALSYM MCI_GETDEVCAPS_HAS_VIDEO}
  3197.   MCI_GETDEVCAPS_HAS_VIDEO        = $00000003;
  3198.   {$EXTERNALSYM MCI_GETDEVCAPS_DEVICE_TYPE}
  3199.   MCI_GETDEVCAPS_DEVICE_TYPE      = $00000004;
  3200.   {$EXTERNALSYM MCI_GETDEVCAPS_USES_FILES}
  3201.   MCI_GETDEVCAPS_USES_FILES       = $00000005;
  3202.   {$EXTERNALSYM MCI_GETDEVCAPS_COMPOUND_DEVICE}
  3203.   MCI_GETDEVCAPS_COMPOUND_DEVICE  = $00000006;
  3204.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_EJECT}
  3205.   MCI_GETDEVCAPS_CAN_EJECT        = $00000007;
  3206.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_PLAY}
  3207.   MCI_GETDEVCAPS_CAN_PLAY         = $00000008;
  3208.   {$EXTERNALSYM MCI_GETDEVCAPS_CAN_SAVE}
  3209.   MCI_GETDEVCAPS_CAN_SAVE         = $00000009;
  3210.  
  3211. { flags for dwFlags parameter of MCI_SYSINFO command message }
  3212. const
  3213.   {$EXTERNALSYM MCI_SYSINFO_QUANTITY}
  3214.   MCI_SYSINFO_QUANTITY            = $00000100;
  3215.   {$EXTERNALSYM MCI_SYSINFO_OPEN}
  3216.   MCI_SYSINFO_OPEN                = $00000200;
  3217.   {$EXTERNALSYM MCI_SYSINFO_NAME}
  3218.   MCI_SYSINFO_NAME                = $00000400;
  3219.   {$EXTERNALSYM MCI_SYSINFO_INSTALLNAME}
  3220.   MCI_SYSINFO_INSTALLNAME         = $00000800;
  3221.  
  3222. { flags for dwFlags parameter of MCI_SET command message }
  3223. const
  3224.   {$EXTERNALSYM MCI_SET_DOOR_OPEN}
  3225.   MCI_SET_DOOR_OPEN               = $00000100;
  3226.   {$EXTERNALSYM MCI_SET_DOOR_CLOSED}
  3227.   MCI_SET_DOOR_CLOSED             = $00000200;
  3228.   {$EXTERNALSYM MCI_SET_TIME_FORMAT}
  3229.   MCI_SET_TIME_FORMAT             = $00000400;
  3230.   {$EXTERNALSYM MCI_SET_AUDIO}
  3231.   MCI_SET_AUDIO                   = $00000800;
  3232.   {$EXTERNALSYM MCI_SET_VIDEO}
  3233.   MCI_SET_VIDEO                   = $00001000;
  3234.   {$EXTERNALSYM MCI_SET_ON}
  3235.   MCI_SET_ON                      = $00002000;
  3236.   {$EXTERNALSYM MCI_SET_OFF}
  3237.   MCI_SET_OFF                     = $00004000;
  3238.  
  3239. { flags for dwAudio field of MCI_SET_PARMS or MCI_SEQ_SET_PARMS }
  3240. const
  3241.   {$EXTERNALSYM MCI_SET_AUDIO_ALL}
  3242.   MCI_SET_AUDIO_ALL               = $00000000;
  3243.   {$EXTERNALSYM MCI_SET_AUDIO_LEFT}
  3244.   MCI_SET_AUDIO_LEFT              = $00000001;
  3245.   {$EXTERNALSYM MCI_SET_AUDIO_RIGHT}
  3246.   MCI_SET_AUDIO_RIGHT             = $00000002;
  3247.  
  3248. { flags for dwFlags parameter of MCI_BREAK command message }
  3249. const
  3250.   {$EXTERNALSYM MCI_BREAK_KEY}
  3251.   MCI_BREAK_KEY                   = $00000100;
  3252.   {$EXTERNALSYM MCI_BREAK_HWND}
  3253.   MCI_BREAK_HWND                  = $00000200;
  3254.   {$EXTERNALSYM MCI_BREAK_OFF}
  3255.   MCI_BREAK_OFF                   = $00000400;
  3256.  
  3257. { flags for dwFlags parameter of MCI_RECORD command message }
  3258. const
  3259.   {$EXTERNALSYM MCI_RECORD_INSERT}
  3260.   MCI_RECORD_INSERT               = $00000100;
  3261.   {$EXTERNALSYM MCI_RECORD_OVERWRITE}
  3262.   MCI_RECORD_OVERWRITE            = $00000200;
  3263.  
  3264. { flags for dwFlags parameter of MCI_SOUND command message }
  3265. const
  3266.   MCI_SOUND_NAME                  = $00000100;
  3267.  
  3268. { flags for dwFlags parameter of MCI_SAVE command message }
  3269. const
  3270.   {$EXTERNALSYM MCI_SAVE_FILE}
  3271.   MCI_SAVE_FILE                   = $00000100;
  3272.  
  3273. { flags for dwFlags parameter of MCI_LOAD command message }
  3274. const
  3275.   {$EXTERNALSYM MCI_LOAD_FILE}
  3276.   MCI_LOAD_FILE                   = $00000100;
  3277.  
  3278. { generic parameter block for MCI command messages with no special parameters }
  3279. type
  3280.   PMCI_Generic_Parms = ^TMCI_Generic_Parms;
  3281.   {$EXTERNALSYM tagMCI_GENERIC_PARMS}
  3282.   tagMCI_GENERIC_PARMS = record
  3283.     dwCallback: DWORD;
  3284.   end;
  3285.   TMCI_Generic_Parms = tagMCI_GENERIC_PARMS;
  3286.   {$EXTERNALSYM MCI_GENERIC_PARMS}
  3287.   MCI_GENERIC_PARMS = tagMCI_GENERIC_PARMS;
  3288.  
  3289. { parameter block for MCI_OPEN command message }
  3290. type
  3291.   PMCI_Open_ParmsA = ^TMCI_Open_ParmsA;
  3292.   PMCI_Open_ParmsW = ^TMCI_Open_ParmsW;
  3293.   PMCI_Open_Parms = PMCI_Open_ParmsA;
  3294.   {$EXTERNALSYM tagMCI_OPEN_PARMSA}
  3295.   tagMCI_OPEN_PARMSA = record
  3296.     dwCallback: DWORD;
  3297.     wDeviceID: MCIDEVICEID;
  3298.     lpstrDeviceType: PAnsiChar;
  3299.     lpstrElementName: PAnsiChar;
  3300.     lpstrAlias: PAnsiChar;
  3301.   end;
  3302.   {$EXTERNALSYM tagMCI_OPEN_PARMSW}
  3303.   tagMCI_OPEN_PARMSW = record
  3304.     dwCallback: DWORD;
  3305.     wDeviceID: MCIDEVICEID;
  3306.     lpstrDeviceType: PWideChar;
  3307.     lpstrElementName: PWideChar;
  3308.     lpstrAlias: PWideChar;
  3309.   end;
  3310.   {$EXTERNALSYM tagMCI_OPEN_PARMS}
  3311.   tagMCI_OPEN_PARMS = tagMCI_OPEN_PARMSA;
  3312.   TMCI_Open_ParmsA = tagMCI_OPEN_PARMSA;
  3313.   TMCI_Open_ParmsW = tagMCI_OPEN_PARMSW;
  3314.   TMCI_Open_Parms = TMCI_Open_ParmsA;
  3315.   {$EXTERNALSYM MCI_OPEN_PARMSA}
  3316.   MCI_OPEN_PARMSA = tagMCI_OPEN_PARMSA;
  3317.   {$EXTERNALSYM MCI_OPEN_PARMSW}
  3318.   MCI_OPEN_PARMSW = tagMCI_OPEN_PARMSW;
  3319.   {$EXTERNALSYM MCI_OPEN_PARMS}
  3320.   MCI_OPEN_PARMS = MCI_OPEN_PARMSA;
  3321.  
  3322. { parameter block for MCI_PLAY command message }
  3323. type
  3324.   PMCI_Play_Parms = ^TMCI_Play_Parms;
  3325.   {$EXTERNALSYM tagMCI_PLAY_PARMS}
  3326.   tagMCI_PLAY_PARMS = record
  3327.     dwCallback: DWORD;
  3328.     dwFrom: DWORD;
  3329.     dwTo: DWORD;
  3330.   end;
  3331.   TMCI_Play_Parms = tagMCI_PLAY_PARMS;
  3332.   {$EXTERNALSYM MCI_PLAY_PARMS}
  3333.   MCI_PLAY_PARMS = tagMCI_PLAY_PARMS;
  3334.  
  3335. { parameter block for MCI_SEEK command message }
  3336. type
  3337.   PMCI_Seek_Parms = ^TMCI_Seek_Parms;
  3338.   {$EXTERNALSYM tagMCI_SEEK_PARMS}
  3339.   tagMCI_SEEK_PARMS = record
  3340.     dwCallback: DWORD;
  3341.     dwTo: DWORD;
  3342.   end;
  3343.   TMCI_Seek_Parms = tagMCI_SEEK_PARMS;
  3344.   {$EXTERNALSYM MCI_SEEK_PARMS}
  3345.   MCI_SEEK_PARMS = tagMCI_SEEK_PARMS;
  3346.  
  3347.  
  3348. { parameter block for MCI_STATUS command message }
  3349. type
  3350.   PMCI_Status_Parms = ^TMCI_Status_Parms;
  3351.   {$EXTERNALSYM tagMCI_STATUS_PARMS}
  3352.   tagMCI_STATUS_PARMS = record
  3353.     dwCallback: DWORD;
  3354.     dwReturn: DWORD;
  3355.     dwItem: DWORD;
  3356.     dwTrack: DWORD;
  3357.   end;
  3358.   TMCI_Status_Parms = tagMCI_STATUS_PARMS;
  3359.   {$EXTERNALSYM MCI_STATUS_PARMS}
  3360.   MCI_STATUS_PARMS = tagMCI_STATUS_PARMS;
  3361.  
  3362. { parameter block for MCI_INFO command message }
  3363. type
  3364.   PMCI_Info_ParmsA = ^TMCI_Info_ParmsA;
  3365.   PMCI_Info_ParmsW = ^TMCI_Info_ParmsW;
  3366.   PMCI_Info_Parms = PMCI_Info_ParmsA;
  3367.   {$EXTERNALSYM tagMCI_INFO_PARMSA}
  3368.   tagMCI_INFO_PARMSA = record
  3369.     dwCallback: DWORD;
  3370.     lpstrReturn: PAnsiChar;
  3371.     dwRetSize: DWORD;
  3372.   end;
  3373.   {$EXTERNALSYM tagMCI_INFO_PARMSW}
  3374.   tagMCI_INFO_PARMSW = record
  3375.     dwCallback: DWORD;
  3376.     lpstrReturn: PWideChar;
  3377.     dwRetSize: DWORD;
  3378.   end;
  3379.   {$EXTERNALSYM tagMCI_INFO_PARMS}
  3380.   tagMCI_INFO_PARMS = tagMCI_INFO_PARMSA;
  3381.   TMCI_Info_ParmsA = tagMCI_INFO_PARMSA;
  3382.   TMCI_Info_ParmsW = tagMCI_INFO_PARMSW;
  3383.   TMCI_Info_Parms = TMCI_Info_ParmsA;
  3384.   {$EXTERNALSYM MCI_INFO_PARMSA}
  3385.   MCI_INFO_PARMSA = tagMCI_INFO_PARMSA;
  3386.   {$EXTERNALSYM MCI_INFO_PARMSW}
  3387.   MCI_INFO_PARMSW = tagMCI_INFO_PARMSW;
  3388.   {$EXTERNALSYM MCI_INFO_PARMS}
  3389.   MCI_INFO_PARMS = MCI_INFO_PARMSA;
  3390.  
  3391. { parameter block for MCI_GETDEVCAPS command message }
  3392. type
  3393.   PMCI_GetDevCaps_Parms = ^TMCI_GetDevCaps_Parms;
  3394.   {$EXTERNALSYM tagMCI_GETDEVCAPS_PARMS}
  3395.   tagMCI_GETDEVCAPS_PARMS = record
  3396.     dwCallback: DWORD;
  3397.     dwReturn: DWORD;
  3398.     dwItem: DWORD;
  3399.   end;
  3400.   TMCI_GetDevCaps_Parms = tagMCI_GETDEVCAPS_PARMS;
  3401.   {$EXTERNALSYM MCI_GETDEVCAPS_PARMS}
  3402.   MCI_GETDEVCAPS_PARMS = tagMCI_GETDEVCAPS_PARMS;
  3403.  
  3404. { parameter block for MCI_SYSINFO command message }
  3405. type
  3406.   PMCI_SysInfo_ParmsA = ^TMCI_SysInfo_ParmsA;
  3407.   PMCI_SysInfo_ParmsW = ^TMCI_SysInfo_ParmsW;
  3408.   PMCI_SysInfo_Parms = PMCI_SysInfo_ParmsA;
  3409.   {$EXTERNALSYM tagMCI_SYSINFO_PARMSA}
  3410.   tagMCI_SYSINFO_PARMSA = record
  3411.     dwCallback: DWORD;
  3412.     lpstrReturn: PAnsiChar;
  3413.     dwRetSize: DWORD;
  3414.     dwNumber: DWORD;
  3415.     wDeviceType: UINT;
  3416.   end;
  3417.   {$EXTERNALSYM tagMCI_SYSINFO_PARMSW}
  3418.   tagMCI_SYSINFO_PARMSW = record
  3419.     dwCallback: DWORD;
  3420.     lpstrReturn: PWideChar;
  3421.     dwRetSize: DWORD;
  3422.     dwNumber: DWORD;
  3423.     wDeviceType: UINT;
  3424.   end;
  3425.   {$EXTERNALSYM tagMCI_SYSINFO_PARMS}
  3426.   tagMCI_SYSINFO_PARMS = tagMCI_SYSINFO_PARMSA;
  3427.   TMCI_SysInfo_ParmsA = tagMCI_SYSINFO_PARMSA;
  3428.   TMCI_SysInfo_ParmsW = tagMCI_SYSINFO_PARMSW;
  3429.   TMCI_SysInfo_Parms = TMCI_SysInfo_ParmsA;
  3430.   {$EXTERNALSYM MCI_SYSINFO_PARMSA}
  3431.   MCI_SYSINFO_PARMSA = tagMCI_SYSINFO_PARMSA;
  3432.   {$EXTERNALSYM MCI_SYSINFO_PARMSW}
  3433.   MCI_SYSINFO_PARMSW = tagMCI_SYSINFO_PARMSW;
  3434.   {$EXTERNALSYM MCI_SYSINFO_PARMS}
  3435.   MCI_SYSINFO_PARMS = MCI_SYSINFO_PARMSA;
  3436.  
  3437. { parameter block for MCI_SET command message }
  3438. type
  3439.   PMCI_Set_Parms = ^TMCI_Set_Parms;
  3440.   {$EXTERNALSYM tagMCI_SET_PARMS}
  3441.   tagMCI_SET_PARMS = record
  3442.     dwCallback: DWORD;
  3443.     dwTimeFormat: DWORD;
  3444.     dwAudio: DWORD;
  3445.   end;
  3446.   TMCI_Set_Parms = tagMCI_SET_PARMS;
  3447.   {$EXTERNALSYM MCI_SET_PARMS}
  3448.   MCI_SET_PARMS = tagMCI_SET_PARMS;
  3449.  
  3450.  
  3451. { parameter block for MCI_BREAK command message }
  3452. type
  3453.   PMCI_Break_Parms = ^TMCI_BReak_Parms;
  3454.   {$EXTERNALSYM tagMCI_BREAK_PARMS}
  3455.   tagMCI_BREAK_PARMS = record
  3456.     dwCallback: DWORD;
  3457.     nVirtKey: Integer;
  3458.     hWndBreak: HWND;
  3459.   end;
  3460.   TMCI_BReak_Parms = tagMCI_BREAK_PARMS;
  3461.   {$EXTERNALSYM MCI_BREAK_PARMS}
  3462.   MCI_BREAK_PARMS = tagMCI_BREAK_PARMS;
  3463.  
  3464. { parameter block for MCI_SOUND command message }
  3465. type
  3466.   PMCI_Sound_Parms = ^TMCI_Sound_Parms;
  3467.   TMCI_Sound_Parms = record
  3468.     dwCallback: Longint;
  3469.     lpstrSoundName: PChar;
  3470.   end;
  3471.  
  3472. { parameter block for MCI_SAVE command message }
  3473. type
  3474.   PMCI_Save_ParmsA = ^TMCI_SaveParmsA;
  3475.   PMCI_Save_ParmsW = ^TMCI_SaveParmsW;
  3476.   PMCI_Save_Parms = PMCI_Save_ParmsA;
  3477.   TMCI_SaveParmsA = record
  3478.     dwCallback: DWORD;
  3479.     lpfilename: PAnsiChar;
  3480.   end;
  3481.   TMCI_SaveParmsW = record
  3482.     dwCallback: DWORD;
  3483.     lpfilename: PWideChar;
  3484.   end;
  3485.   TMCI_SaveParms = TMCI_SaveParmsA;
  3486.  
  3487. { parameter block for MCI_LOAD command message }
  3488. type
  3489.   PMCI_Load_ParmsA = ^TMCI_Load_ParmsA;
  3490.   PMCI_Load_ParmsW = ^TMCI_Load_ParmsW;
  3491.   PMCI_Load_Parms = PMCI_Load_ParmsA;
  3492.   {$EXTERNALSYM tagMCI_LOAD_PARMSA}
  3493.   tagMCI_LOAD_PARMSA = record
  3494.     dwCallback: DWORD;
  3495.     lpfilename: PAnsiChar;
  3496.   end;
  3497.   {$EXTERNALSYM tagMCI_LOAD_PARMSW}
  3498.   tagMCI_LOAD_PARMSW = record
  3499.     dwCallback: DWORD;
  3500.     lpfilename: PWideChar;
  3501.   end;
  3502.   {$EXTERNALSYM tagMCI_LOAD_PARMS}
  3503.   tagMCI_LOAD_PARMS = tagMCI_LOAD_PARMSA;
  3504.   TMCI_Load_ParmsA = tagMCI_LOAD_PARMSA;
  3505.   TMCI_Load_ParmsW = tagMCI_LOAD_PARMSW;
  3506.   TMCI_Load_Parms = TMCI_Load_ParmsA;
  3507.   {$EXTERNALSYM MCI_LOAD_PARMSA}
  3508.   MCI_LOAD_PARMSA = tagMCI_LOAD_PARMSA;
  3509.   {$EXTERNALSYM MCI_LOAD_PARMSW}
  3510.   MCI_LOAD_PARMSW = tagMCI_LOAD_PARMSW;
  3511.   {$EXTERNALSYM MCI_LOAD_PARMS}
  3512.   MCI_LOAD_PARMS = MCI_LOAD_PARMSA;
  3513.  
  3514. { parameter block for MCI_RECORD command message }
  3515. type
  3516.   PMCI_Record_Parms = ^TMCI_Record_Parms;
  3517.   {$EXTERNALSYM tagMCI_RECORD_PARMS}
  3518.   tagMCI_RECORD_PARMS = record
  3519.     dwCallback: DWORD;
  3520.     dwFrom: DWORD;
  3521.     dwTo: DWORD;
  3522.   end;
  3523.   TMCI_Record_Parms = tagMCI_RECORD_PARMS;
  3524.   {$EXTERNALSYM MCI_RECORD_PARMS}
  3525.   MCI_RECORD_PARMS = tagMCI_RECORD_PARMS;
  3526.  
  3527.  
  3528. { MCI extensions for videodisc devices }
  3529.  
  3530. { flag for dwReturn field of MCI_STATUS_PARMS }
  3531. { MCI_STATUS command, (dwItem == MCI_STATUS_MODE) }
  3532. const
  3533.   {$EXTERNALSYM MCI_VD_MODE_PARK}
  3534.   MCI_VD_MODE_PARK                = MCI_VD_OFFSET + 1;
  3535.  
  3536. { flag for dwReturn field of MCI_STATUS_PARMS }
  3537. { MCI_STATUS command, (dwItem == MCI_VD_STATUS_MEDIA_TYPE) }
  3538. const
  3539.   {$EXTERNALSYM MCI_VD_MEDIA_CLV}
  3540.   MCI_VD_MEDIA_CLV                = MCI_VD_OFFSET + 2;
  3541.   {$EXTERNALSYM MCI_VD_MEDIA_CAV}
  3542.   MCI_VD_MEDIA_CAV                = MCI_VD_OFFSET + 3;
  3543.   {$EXTERNALSYM MCI_VD_MEDIA_OTHER}
  3544.   MCI_VD_MEDIA_OTHER              = MCI_VD_OFFSET + 4;
  3545.  
  3546. const
  3547.   {$EXTERNALSYM MCI_VD_FORMAT_TRACK}
  3548.   MCI_VD_FORMAT_TRACK             = $4001;
  3549.  
  3550. { flags for dwFlags parameter of MCI_PLAY command message }
  3551. const
  3552.   {$EXTERNALSYM MCI_VD_PLAY_REVERSE}
  3553.   MCI_VD_PLAY_REVERSE             = $00010000;
  3554.   {$EXTERNALSYM MCI_VD_PLAY_FAST}
  3555.   MCI_VD_PLAY_FAST                = $00020000;
  3556.   {$EXTERNALSYM MCI_VD_PLAY_SPEED}
  3557.   MCI_VD_PLAY_SPEED               = $00040000;
  3558.   {$EXTERNALSYM MCI_VD_PLAY_SCAN}
  3559.   MCI_VD_PLAY_SCAN                = $00080000;
  3560.   {$EXTERNALSYM MCI_VD_PLAY_SLOW}
  3561.   MCI_VD_PLAY_SLOW                = $00100000;
  3562.  
  3563. { flag for dwFlags parameter of MCI_SEEK command message }
  3564. const
  3565.   {$EXTERNALSYM MCI_VD_SEEK_REVERSE}
  3566.   MCI_VD_SEEK_REVERSE             = $00010000;
  3567.  
  3568. { flags for dwItem field of MCI_STATUS_PARMS parameter block }
  3569. const
  3570.   {$EXTERNALSYM MCI_VD_STATUS_SPEED}
  3571.   MCI_VD_STATUS_SPEED             = $00004002;
  3572.   {$EXTERNALSYM MCI_VD_STATUS_FORWARD}
  3573.   MCI_VD_STATUS_FORWARD           = $00004003;
  3574.   {$EXTERNALSYM MCI_VD_STATUS_MEDIA_TYPE}
  3575.   MCI_VD_STATUS_MEDIA_TYPE        = $00004004;
  3576.   {$EXTERNALSYM MCI_VD_STATUS_SIDE}
  3577.   MCI_VD_STATUS_SIDE              = $00004005;
  3578.   {$EXTERNALSYM MCI_VD_STATUS_DISC_SIZE}
  3579.   MCI_VD_STATUS_DISC_SIZE         = $00004006;
  3580.  
  3581. { flags for dwFlags parameter of MCI_GETDEVCAPS command message }
  3582. const
  3583.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_CLV}
  3584.   MCI_VD_GETDEVCAPS_CLV           = $00010000;
  3585.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_CAV}
  3586.   MCI_VD_GETDEVCAPS_CAV           = $00020000;
  3587.  
  3588.   {$EXTERNALSYM MCI_VD_SPIN_UP}
  3589.   MCI_VD_SPIN_UP                  = $00010000;
  3590.   {$EXTERNALSYM MCI_VD_SPIN_DOWN}
  3591.   MCI_VD_SPIN_DOWN                = $00020000;
  3592.  
  3593. { flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block }
  3594. const
  3595.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_CAN_REVERSE}
  3596.   MCI_VD_GETDEVCAPS_CAN_REVERSE   = $00004002;
  3597.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_FAST_RATE}
  3598.   MCI_VD_GETDEVCAPS_FAST_RATE     = $00004003;
  3599.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_SLOW_RATE}
  3600.   MCI_VD_GETDEVCAPS_SLOW_RATE     = $00004004;
  3601.   {$EXTERNALSYM MCI_VD_GETDEVCAPS_NORMAL_RATE}
  3602.   MCI_VD_GETDEVCAPS_NORMAL_RATE   = $00004005;
  3603.  
  3604. { flags for the dwFlags parameter of MCI_STEP command message }
  3605. const
  3606.   {$EXTERNALSYM MCI_VD_STEP_FRAMES}
  3607.   MCI_VD_STEP_FRAMES              = $00010000;
  3608.   {$EXTERNALSYM MCI_VD_STEP_REVERSE}
  3609.   MCI_VD_STEP_REVERSE             = $00020000;
  3610.  
  3611. { flag for the MCI_ESCAPE command message }
  3612. const
  3613.   {$EXTERNALSYM MCI_VD_ESCAPE_STRING}
  3614.   MCI_VD_ESCAPE_STRING            = $00000100;
  3615.  
  3616. { parameter block for MCI_PLAY command message }
  3617. type
  3618.   PMCI_VD_Play_Parms = ^TMCI_VD_Play_Parms;
  3619.   {$EXTERNALSYM tagMCI_VD_PLAY_PARMS}
  3620.   tagMCI_VD_PLAY_PARMS = record
  3621.     dwCallback: DWORD;
  3622.     dwFrom: DWORD;
  3623.     dwTo: DWORD;
  3624.     dwSpeed: DWORD;
  3625.   end;
  3626.   TMCI_VD_Play_Parms = tagMCI_VD_PLAY_PARMS;
  3627.   {$EXTERNALSYM MCI_VD_PLAY_PARMS}
  3628.   MCI_VD_PLAY_PARMS = tagMCI_VD_PLAY_PARMS;
  3629.  
  3630. { parameter block for MCI_STEP command message }
  3631. type
  3632.   PMCI_VD_Step_Parms = ^TMCI_VD_Step_Parms;
  3633.   {$EXTERNALSYM tagMCI_VD_STEP_PARMS}
  3634.   tagMCI_VD_STEP_PARMS = record
  3635.     dwCallback: DWORD;
  3636.     dwFrames: DWORD;
  3637.   end;
  3638.   TMCI_VD_Step_Parms = tagMCI_VD_STEP_PARMS;
  3639.   {$EXTERNALSYM MCI_VD_STEP_PARMS}
  3640.   MCI_VD_STEP_PARMS = tagMCI_VD_STEP_PARMS;
  3641.  
  3642. { parameter block for MCI_ESCAPE command message }
  3643. type
  3644.   PMCI_VD_Escape_ParmsA = ^TMCI_VD_Escape_ParmsA;
  3645.   PMCI_VD_Escape_ParmsW = ^TMCI_VD_Escape_ParmsW;
  3646.   PMCI_VD_Escape_Parms = PMCI_VD_Escape_ParmsA;
  3647.   {$EXTERNALSYM tagMCI_VD_ESCAPE_PARMSA}
  3648.   tagMCI_VD_ESCAPE_PARMSA = record
  3649.     dwCallback: DWORD;
  3650.     lpstrCommand: PAnsiChar;
  3651.   end;
  3652.   {$EXTERNALSYM tagMCI_VD_ESCAPE_PARMSW}
  3653.   tagMCI_VD_ESCAPE_PARMSW = record
  3654.     dwCallback: DWORD;
  3655.     lpstrCommand: PWideChar;
  3656.   end;
  3657.   {$EXTERNALSYM tagMCI_VD_ESCAPE_PARMS}
  3658.   tagMCI_VD_ESCAPE_PARMS = tagMCI_VD_ESCAPE_PARMSA;
  3659.   TMCI_VD_Escape_ParmsA = tagMCI_VD_ESCAPE_PARMSA;
  3660.   TMCI_VD_Escape_ParmsW = tagMCI_VD_ESCAPE_PARMSW;
  3661.   TMCI_VD_Escape_Parms = TMCI_VD_Escape_ParmsA;
  3662.   {$EXTERNALSYM MCI_VD_ESCAPE_PARMSA}
  3663.   MCI_VD_ESCAPE_PARMSA = tagMCI_VD_ESCAPE_PARMSA;
  3664.   {$EXTERNALSYM MCI_VD_ESCAPE_PARMSW}
  3665.   MCI_VD_ESCAPE_PARMSW = tagMCI_VD_ESCAPE_PARMSW;
  3666.   {$EXTERNALSYM MCI_VD_ESCAPE_PARMS}
  3667.   MCI_VD_ESCAPE_PARMS = MCI_VD_ESCAPE_PARMSA;
  3668.  
  3669. { MCI extensions for CD audio devices }
  3670.  
  3671. { flags for the dwItem field of the MCI_STATUS_PARMS parameter block }
  3672. const
  3673.   {$EXTERNALSYM MCI_CDA_STATUS_TYPE_TRACK}
  3674.   MCI_CDA_STATUS_TYPE_TRACK       = 00004001;
  3675.  
  3676. { flags for the dwReturn field of MCI_STATUS_PARMS parameter block }
  3677. { MCI_STATUS command, (dwItem == MCI_CDA_STATUS_TYPE_TRACK) }
  3678.   {$EXTERNALSYM MCI_CDA_TRACK_AUDIO}
  3679.   MCI_CDA_TRACK_AUDIO             = MCI_CD_OFFSET + 0;
  3680.   {$EXTERNALSYM MCI_CDA_TRACK_OTHER}
  3681.   MCI_CDA_TRACK_OTHER             = MCI_CD_OFFSET + 1;
  3682.  
  3683. { MCI extensions for waveform audio devices }
  3684.   {$EXTERNALSYM MCI_WAVE_PCM}
  3685.   MCI_WAVE_PCM                    = MCI_WAVE_OFFSET + 0;
  3686.   {$EXTERNALSYM MCI_WAVE_MAPPER}
  3687.   MCI_WAVE_MAPPER                 = MCI_WAVE_OFFSET + 1;
  3688.  
  3689. { flags for the dwFlags parameter of MCI_OPEN command message }
  3690. const
  3691.   {$EXTERNALSYM MCI_WAVE_OPEN_BUFFER}
  3692.   MCI_WAVE_OPEN_BUFFER            = $00010000;
  3693.  
  3694. { flags for the dwFlags parameter of MCI_SET command message }
  3695. const
  3696.   {$EXTERNALSYM MCI_WAVE_SET_FORMATTAG}
  3697.   MCI_WAVE_SET_FORMATTAG          = $00010000;
  3698.   {$EXTERNALSYM MCI_WAVE_SET_CHANNELS}
  3699.   MCI_WAVE_SET_CHANNELS           = $00020000;
  3700.   {$EXTERNALSYM MCI_WAVE_SET_SAMPLESPERSEC}
  3701.   MCI_WAVE_SET_SAMPLESPERSEC      = $00040000;
  3702.   {$EXTERNALSYM MCI_WAVE_SET_AVGBYTESPERSEC}
  3703.   MCI_WAVE_SET_AVGBYTESPERSEC     = $00080000;
  3704.   {$EXTERNALSYM MCI_WAVE_SET_BLOCKALIGN}
  3705.   MCI_WAVE_SET_BLOCKALIGN         = $00100000;
  3706.   {$EXTERNALSYM MCI_WAVE_SET_BITSPERSAMPLE}
  3707.   MCI_WAVE_SET_BITSPERSAMPLE      = $00200000;
  3708.  
  3709. { flags for the dwFlags parameter of MCI_STATUS, MCI_SET command messages }
  3710. const
  3711.   {$EXTERNALSYM MCI_WAVE_INPUT}
  3712.   MCI_WAVE_INPUT                  = $00400000;
  3713.   {$EXTERNALSYM MCI_WAVE_OUTPUT}
  3714.   MCI_WAVE_OUTPUT                 = $00800000;
  3715.  
  3716. { flags for the dwItem field of MCI_STATUS_PARMS parameter block }
  3717. const
  3718.   {$EXTERNALSYM MCI_WAVE_STATUS_FORMATTAG}
  3719.   MCI_WAVE_STATUS_FORMATTAG       = $00004001;
  3720.   {$EXTERNALSYM MCI_WAVE_STATUS_CHANNELS}
  3721.   MCI_WAVE_STATUS_CHANNELS        = $00004002;
  3722.   {$EXTERNALSYM MCI_WAVE_STATUS_SAMPLESPERSEC}
  3723.   MCI_WAVE_STATUS_SAMPLESPERSEC   = $00004003;
  3724.   {$EXTERNALSYM MCI_WAVE_STATUS_AVGBYTESPERSEC}
  3725.   MCI_WAVE_STATUS_AVGBYTESPERSEC  = $00004004;
  3726.   {$EXTERNALSYM MCI_WAVE_STATUS_BLOCKALIGN}
  3727.   MCI_WAVE_STATUS_BLOCKALIGN      = $00004005;
  3728.   {$EXTERNALSYM MCI_WAVE_STATUS_BITSPERSAMPLE}
  3729.   MCI_WAVE_STATUS_BITSPERSAMPLE   = $00004006;
  3730.   {$EXTERNALSYM MCI_WAVE_STATUS_LEVEL}
  3731.   MCI_WAVE_STATUS_LEVEL           = $00004007;
  3732.  
  3733. { flags for the dwFlags parameter of MCI_SET command message }
  3734. const
  3735.   {$EXTERNALSYM MCI_WAVE_SET_ANYINPUT}
  3736.   MCI_WAVE_SET_ANYINPUT           = $04000000;
  3737.   {$EXTERNALSYM MCI_WAVE_SET_ANYOUTPUT}
  3738.   MCI_WAVE_SET_ANYOUTPUT          = $08000000;
  3739.  
  3740. { flags for the dwFlags parameter of MCI_GETDEVCAPS command message }
  3741. const
  3742.   {$EXTERNALSYM MCI_WAVE_GETDEVCAPS_INPUTS}
  3743.   MCI_WAVE_GETDEVCAPS_INPUTS      = $00004001;
  3744.   {$EXTERNALSYM MCI_WAVE_GETDEVCAPS_OUTPUTS}
  3745.   MCI_WAVE_GETDEVCAPS_OUTPUTS     = $00004002;
  3746.  
  3747. { parameter block for MCI_OPEN command message }
  3748. type
  3749.   PMCI_Wave_Open_ParmsA = ^TMCI_Wave_Open_ParmsA;
  3750.   PMCI_Wave_Open_ParmsW = ^TMCI_Wave_Open_ParmsW;
  3751.   PMCI_Wave_Open_Parms = PMCI_Wave_Open_ParmsA;
  3752.   {$EXTERNALSYM tagMCI_WAVE_OPEN_PARMSA}
  3753.   tagMCI_WAVE_OPEN_PARMSA = record
  3754.     dwCallback: DWORD;
  3755.     wDeviceID: MCIDEVICEID;
  3756.     lpstrDeviceType: PAnsiChar;
  3757.     lpstrElementName: PAnsiChar;
  3758.     lpstrAlias: PAnsiChar;
  3759.     dwBufferSeconds: DWORD;
  3760.   end;
  3761.   {$EXTERNALSYM tagMCI_WAVE_OPEN_PARMSW}
  3762.   tagMCI_WAVE_OPEN_PARMSW = record
  3763.     dwCallback: DWORD;
  3764.     wDeviceID: MCIDEVICEID;
  3765.     lpstrDeviceType: PWideChar;
  3766.     lpstrElementName: PWideChar;
  3767.     lpstrAlias: PWideChar;
  3768.     dwBufferSeconds: DWORD;
  3769.   end;
  3770.   {$EXTERNALSYM tagMCI_WAVE_OPEN_PARMS}
  3771.   tagMCI_WAVE_OPEN_PARMS = tagMCI_WAVE_OPEN_PARMSA;
  3772.   TMCI_Wave_Open_ParmsA = tagMCI_WAVE_OPEN_PARMSA;
  3773.   TMCI_Wave_Open_ParmsW = tagMCI_WAVE_OPEN_PARMSW;
  3774.   TMCI_Wave_Open_Parms = TMCI_Wave_Open_ParmsA;
  3775.   {$EXTERNALSYM MCI_WAVE_OPEN_PARMSA}
  3776.   MCI_WAVE_OPEN_PARMSA = tagMCI_WAVE_OPEN_PARMSA;
  3777.   {$EXTERNALSYM MCI_WAVE_OPEN_PARMSW}
  3778.   MCI_WAVE_OPEN_PARMSW = tagMCI_WAVE_OPEN_PARMSW;
  3779.   {$EXTERNALSYM MCI_WAVE_OPEN_PARMS}
  3780.   MCI_WAVE_OPEN_PARMS = MCI_WAVE_OPEN_PARMSA;
  3781.  
  3782. { parameter block for MCI_DELETE command message }
  3783. type
  3784.   PMCI_Wave_Delete_Parms = ^TMCI_Wave_Delete_Parms;
  3785.   {$EXTERNALSYM tagMCI_WAVE_DELETE_PARMS}
  3786.   tagMCI_WAVE_DELETE_PARMS = record
  3787.     dwCallback: DWORD;
  3788.     dwFrom: DWORD;
  3789.     dwTo: DWORD;
  3790.   end;
  3791.   TMCI_Wave_Delete_Parms = tagMCI_WAVE_DELETE_PARMS;
  3792.   {$EXTERNALSYM MCI_WAVE_DELETE_PARMS}
  3793.   MCI_WAVE_DELETE_PARMS = tagMCI_WAVE_DELETE_PARMS;
  3794.  
  3795. { parameter block for MCI_SET command message }
  3796. type
  3797.   PMCI_Wave_Set_Parms = ^TMCI_Wave_Set_Parms;
  3798.   {$EXTERNALSYM tagMCI_WAVE_SET_PARMS}
  3799.   tagMCI_WAVE_SET_PARMS = record
  3800.     dwCallback: DWORD;
  3801.     dwTimeFormat: DWORD;
  3802.     dwAudio: DWORD;
  3803.     wInput: UINT;
  3804.     wOutput: UINT;
  3805.     wFormatTag: Word;
  3806.     wReserved2: Word;
  3807.     nChannels: Word;
  3808.     wReserved3: Word;
  3809.     nSamplesPerSec: DWORD;
  3810.     nAvgBytesPerSec: DWORD;
  3811.     nBlockAlign: Word;
  3812.     wReserved4: Word;
  3813.     wBitsPerSample: Word;
  3814.     wReserved5: Word;
  3815.   end;
  3816.   TMCI_Wave_Set_Parms = tagMCI_WAVE_SET_PARMS;
  3817.   {$EXTERNALSYM MCI_WAVE_SET_PARMS}
  3818.   MCI_WAVE_SET_PARMS = tagMCI_WAVE_SET_PARMS;
  3819.  
  3820.  
  3821. { MCI extensions for MIDI sequencer devices }
  3822.  
  3823. { flags for the dwReturn field of MCI_STATUS_PARMS parameter block }
  3824. { MCI_STATUS command, (dwItem == MCI_SEQ_STATUS_DIVTYPE) }
  3825. const
  3826.   {$EXTERNALSYM MCI_SEQ_DIV_PPQN}
  3827.   MCI_SEQ_DIV_PPQN            = 0 + MCI_SEQ_OFFSET;
  3828.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_24}
  3829.   MCI_SEQ_DIV_SMPTE_24        = 1 + MCI_SEQ_OFFSET;
  3830.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_25}
  3831.   MCI_SEQ_DIV_SMPTE_25        = 2 + MCI_SEQ_OFFSET;
  3832.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_30DROP}
  3833.   MCI_SEQ_DIV_SMPTE_30DROP    = 3 + MCI_SEQ_OFFSET;
  3834.   {$EXTERNALSYM MCI_SEQ_DIV_SMPTE_30}
  3835.   MCI_SEQ_DIV_SMPTE_30        = 4 + MCI_SEQ_OFFSET;
  3836.  
  3837. { flags for the dwMaster field of MCI_SEQ_SET_PARMS parameter block }
  3838. { MCI_SET command, (dwFlags == MCI_SEQ_SET_MASTER) }
  3839. const
  3840.   {$EXTERNALSYM MCI_SEQ_FORMAT_SONGPTR}
  3841.   MCI_SEQ_FORMAT_SONGPTR      = $4001;
  3842.   {$EXTERNALSYM MCI_SEQ_FILE}
  3843.   MCI_SEQ_FILE                = $4002;
  3844.   {$EXTERNALSYM MCI_SEQ_MIDI}
  3845.   MCI_SEQ_MIDI                = $4003;
  3846.   {$EXTERNALSYM MCI_SEQ_SMPTE}
  3847.   MCI_SEQ_SMPTE               = $4004;
  3848.   {$EXTERNALSYM MCI_SEQ_NONE}
  3849.   MCI_SEQ_NONE                = 65533;
  3850.   {$EXTERNALSYM MCI_SEQ_MAPPER}
  3851.   MCI_SEQ_MAPPER              = 65535;
  3852.  
  3853. { flags for the dwItem field of MCI_STATUS_PARMS parameter block }
  3854. const
  3855.   {$EXTERNALSYM MCI_SEQ_STATUS_TEMPO}
  3856.   MCI_SEQ_STATUS_TEMPO            = $00004002;
  3857.   {$EXTERNALSYM MCI_SEQ_STATUS_PORT}
  3858.   MCI_SEQ_STATUS_PORT             = $00004003;
  3859.   {$EXTERNALSYM MCI_SEQ_STATUS_SLAVE}
  3860.   MCI_SEQ_STATUS_SLAVE            = $00004007;
  3861.   {$EXTERNALSYM MCI_SEQ_STATUS_MASTER}
  3862.   MCI_SEQ_STATUS_MASTER           = $00004008;
  3863.   {$EXTERNALSYM MCI_SEQ_STATUS_OFFSET}
  3864.   MCI_SEQ_STATUS_OFFSET           = $00004009;
  3865.   {$EXTERNALSYM MCI_SEQ_STATUS_DIVTYPE}
  3866.   MCI_SEQ_STATUS_DIVTYPE          = $0000400A;
  3867.   {$EXTERNALSYM MCI_SEQ_STATUS_NAME}
  3868.   MCI_SEQ_STATUS_NAME             = $0000400B;
  3869.   {$EXTERNALSYM MCI_SEQ_STATUS_COPYRIGHT}
  3870.   MCI_SEQ_STATUS_COPYRIGHT        = $0000400C;
  3871.  
  3872. { flags for the dwFlags parameter of MCI_SET command message }
  3873. const
  3874.   {$EXTERNALSYM MCI_SEQ_SET_TEMPO}
  3875.   MCI_SEQ_SET_TEMPO               = $00010000;
  3876.   {$EXTERNALSYM MCI_SEQ_SET_PORT}
  3877.   MCI_SEQ_SET_PORT                = $00020000;
  3878.   {$EXTERNALSYM MCI_SEQ_SET_SLAVE}
  3879.   MCI_SEQ_SET_SLAVE               = $00040000;
  3880.   {$EXTERNALSYM MCI_SEQ_SET_MASTER}
  3881.   MCI_SEQ_SET_MASTER              = $00080000;
  3882.   {$EXTERNALSYM MCI_SEQ_SET_OFFSET}
  3883.   MCI_SEQ_SET_OFFSET              = $01000000;
  3884.  
  3885. { parameter block for MCI_SET command message }
  3886. type
  3887.   PMCI_Seq_Set_Parms = ^TMCI_Seq_Set_Parms;
  3888.   {$EXTERNALSYM tagMCI_SEQ_SET_PARMS}
  3889.   tagMCI_SEQ_SET_PARMS = record
  3890.     dwCallback: DWORD;
  3891.     dwTimeFormat: DWORD;
  3892.     dwAudio: DWORD;
  3893.     dwTempo: DWORD;
  3894.     dwPort: DWORD;
  3895.     dwSlave: DWORD;
  3896.     dwMaster: DWORD;
  3897.     dwOffset: DWORD;
  3898.   end;
  3899.   TMCI_Seq_Set_Parms = tagMCI_SEQ_SET_PARMS;
  3900.   {$EXTERNALSYM MCI_SEQ_SET_PARMS}
  3901.   MCI_SEQ_SET_PARMS = tagMCI_SEQ_SET_PARMS;
  3902.  
  3903. { MCI extensions for animation devices }
  3904.  
  3905. { flags for dwFlags parameter of MCI_OPEN command message }
  3906. const
  3907.   {$EXTERNALSYM MCI_ANIM_OPEN_WS}
  3908.   MCI_ANIM_OPEN_WS                = $00010000;
  3909.   {$EXTERNALSYM MCI_ANIM_OPEN_PARENT}
  3910.   MCI_ANIM_OPEN_PARENT            = $00020000;
  3911.   {$EXTERNALSYM MCI_ANIM_OPEN_NOSTATIC}
  3912.   MCI_ANIM_OPEN_NOSTATIC          = $00040000;
  3913.  
  3914. { flags for dwFlags parameter of MCI_PLAY command message }
  3915. const
  3916.   {$EXTERNALSYM MCI_ANIM_PLAY_SPEED}
  3917.   MCI_ANIM_PLAY_SPEED             = $00010000;
  3918.   {$EXTERNALSYM MCI_ANIM_PLAY_REVERSE}
  3919.   MCI_ANIM_PLAY_REVERSE           = $00020000;
  3920.   {$EXTERNALSYM MCI_ANIM_PLAY_FAST}
  3921.   MCI_ANIM_PLAY_FAST              = $00040000;
  3922.   {$EXTERNALSYM MCI_ANIM_PLAY_SLOW}
  3923.   MCI_ANIM_PLAY_SLOW              = $00080000;
  3924.   {$EXTERNALSYM MCI_ANIM_PLAY_SCAN}
  3925.   MCI_ANIM_PLAY_SCAN              = $00100000;
  3926.  
  3927. { flags for dwFlags parameter of MCI_STEP command message }
  3928. const
  3929.   {$EXTERNALSYM MCI_ANIM_STEP_REVERSE}
  3930.   MCI_ANIM_STEP_REVERSE           = $00010000;
  3931.   {$EXTERNALSYM MCI_ANIM_STEP_FRAMES}
  3932.   MCI_ANIM_STEP_FRAMES            = $00020000;
  3933.  
  3934. { flags for dwItem field of MCI_STATUS_PARMS parameter block }
  3935. const
  3936.   {$EXTERNALSYM MCI_ANIM_STATUS_SPEED}
  3937.   MCI_ANIM_STATUS_SPEED           = $00004001;
  3938.   {$EXTERNALSYM MCI_ANIM_STATUS_FORWARD}
  3939.   MCI_ANIM_STATUS_FORWARD         = $00004002;
  3940.   {$EXTERNALSYM MCI_ANIM_STATUS_HWND}
  3941.   MCI_ANIM_STATUS_HWND            = $00004003;
  3942.   {$EXTERNALSYM MCI_ANIM_STATUS_HPAL}
  3943.   MCI_ANIM_STATUS_HPAL            = $00004004;
  3944.   {$EXTERNALSYM MCI_ANIM_STATUS_STRETCH}
  3945.   MCI_ANIM_STATUS_STRETCH         = $00004005;
  3946.  
  3947. { flags for the dwFlags parameter of MCI_INFO command message }
  3948. const
  3949.   {$EXTERNALSYM MCI_ANIM_INFO_TEXT}
  3950.   MCI_ANIM_INFO_TEXT              = $00010000;
  3951.  
  3952. { flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block }
  3953. const
  3954.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_CAN_REVERSE}
  3955.   MCI_ANIM_GETDEVCAPS_CAN_REVERSE = $00004001;
  3956.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_FAST_RATE}
  3957.   MCI_ANIM_GETDEVCAPS_FAST_RATE   = $00004002;
  3958.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_SLOW_RATE}
  3959.   MCI_ANIM_GETDEVCAPS_SLOW_RATE   = $00004003;
  3960.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_NORMAL_RATE}
  3961.   MCI_ANIM_GETDEVCAPS_NORMAL_RATE = $00004004;
  3962.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_PALETTES}
  3963.   MCI_ANIM_GETDEVCAPS_PALETTES    = $00004006;
  3964.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_CAN_STRETCH}
  3965.   MCI_ANIM_GETDEVCAPS_CAN_STRETCH = $00004007;
  3966.   {$EXTERNALSYM MCI_ANIM_GETDEVCAPS_MAX_WINDOWS}
  3967.   MCI_ANIM_GETDEVCAPS_MAX_WINDOWS = $00004008;
  3968.  
  3969. { flags for the MCI_REALIZE command message }
  3970. const
  3971.   {$EXTERNALSYM MCI_ANIM_REALIZE_NORM}
  3972.   MCI_ANIM_REALIZE_NORM           = $00010000;
  3973.   {$EXTERNALSYM MCI_ANIM_REALIZE_BKGD}
  3974.   MCI_ANIM_REALIZE_BKGD           = $00020000;
  3975.  
  3976. { flags for dwFlags parameter of MCI_WINDOW command message }
  3977. const
  3978.   {$EXTERNALSYM MCI_ANIM_WINDOW_HWND}
  3979.   MCI_ANIM_WINDOW_HWND            = $00010000;
  3980.   {$EXTERNALSYM MCI_ANIM_WINDOW_STATE}
  3981.   MCI_ANIM_WINDOW_STATE           = $00040000;
  3982.   {$EXTERNALSYM MCI_ANIM_WINDOW_TEXT}
  3983.   MCI_ANIM_WINDOW_TEXT            = $00080000;
  3984.   {$EXTERNALSYM MCI_ANIM_WINDOW_ENABLE_STRETCH}
  3985.   MCI_ANIM_WINDOW_ENABLE_STRETCH  = $00100000;
  3986.   {$EXTERNALSYM MCI_ANIM_WINDOW_DISABLE_STRETCH}
  3987.   MCI_ANIM_WINDOW_DISABLE_STRETCH = $00200000;
  3988.  
  3989. { flags for hWnd field of MCI_ANIM_WINDOW_PARMS parameter block }
  3990. { MCI_WINDOW command message, (dwFlags == MCI_ANIM_WINDOW_HWND) }
  3991. const
  3992.   {$EXTERNALSYM MCI_ANIM_WINDOW_DEFAULT}
  3993.   MCI_ANIM_WINDOW_DEFAULT         = $00000000;
  3994.  
  3995. { flags for dwFlags parameter of MCI_PUT command message }
  3996. const
  3997.   {$EXTERNALSYM MCI_ANIM_RECT}
  3998.   MCI_ANIM_RECT                   = $00010000;
  3999.   {$EXTERNALSYM MCI_ANIM_PUT_SOURCE}
  4000.   MCI_ANIM_PUT_SOURCE             = $00020000;
  4001.   {$EXTERNALSYM MCI_ANIM_PUT_DESTINATION}
  4002.   MCI_ANIM_PUT_DESTINATION        = $00040000;
  4003.  
  4004. { flags for dwFlags parameter of MCI_WHERE command message }
  4005. const
  4006.   {$EXTERNALSYM MCI_ANIM_WHERE_SOURCE}
  4007.   MCI_ANIM_WHERE_SOURCE           = $00020000;
  4008.   {$EXTERNALSYM MCI_ANIM_WHERE_DESTINATION}
  4009.   MCI_ANIM_WHERE_DESTINATION      = $00040000;
  4010.  
  4011. { flags for dwFlags parameter of MCI_UPDATE command message }
  4012. const
  4013.   {$EXTERNALSYM MCI_ANIM_UPDATE_HDC}
  4014.   MCI_ANIM_UPDATE_HDC             = $00020000;
  4015.  
  4016. { parameter block for MCI_OPEN command message }
  4017. type
  4018.   PMCI_Anim_Open_ParmsA = ^TMCI_Anim_Open_ParmsA;
  4019.   PMCI_Anim_Open_ParmsW = ^TMCI_Anim_Open_ParmsW;
  4020.   PMCI_Anim_Open_Parms = PMCI_Anim_Open_ParmsA;
  4021.   {$EXTERNALSYM tagMCI_ANIM_OPEN_PARMSA}
  4022.   tagMCI_ANIM_OPEN_PARMSA = record
  4023.     dwCallback: DWORD;
  4024.     wDeviceID: MCIDEVICEID;
  4025.     lpstrDeviceType: PAnsiChar;
  4026.     lpstrElementName: PAnsiChar;
  4027.     lpstrAlias: PAnsiChar;
  4028.     dwStyle: DWORD;
  4029.     hWndParent: HWND;
  4030.   end;
  4031.   {$EXTERNALSYM tagMCI_ANIM_OPEN_PARMSW}
  4032.   tagMCI_ANIM_OPEN_PARMSW = record
  4033.     dwCallback: DWORD;
  4034.     wDeviceID: MCIDEVICEID;
  4035.     lpstrDeviceType: PWideChar;
  4036.     lpstrElementName: PWideChar;
  4037.     lpstrAlias: PWideChar;
  4038.     dwStyle: DWORD;
  4039.     hWndParent: HWND;
  4040.   end;
  4041.   {$EXTERNALSYM tagMCI_ANIM_OPEN_PARMS}
  4042.   tagMCI_ANIM_OPEN_PARMS = tagMCI_ANIM_OPEN_PARMSA;
  4043.   TMCI_Anim_Open_ParmsA = tagMCI_ANIM_OPEN_PARMSA;
  4044.   TMCI_Anim_Open_ParmsW = tagMCI_ANIM_OPEN_PARMSW;
  4045.   TMCI_Anim_Open_Parms = TMCI_Anim_Open_ParmsA;
  4046.   {$EXTERNALSYM MCI_ANIM_OPEN_PARMSA}
  4047.   MCI_ANIM_OPEN_PARMSA = tagMCI_ANIM_OPEN_PARMSA;
  4048.   {$EXTERNALSYM MCI_ANIM_OPEN_PARMSW}
  4049.   MCI_ANIM_OPEN_PARMSW = tagMCI_ANIM_OPEN_PARMSW;
  4050.   {$EXTERNALSYM MCI_ANIM_OPEN_PARMS}
  4051.   MCI_ANIM_OPEN_PARMS = MCI_ANIM_OPEN_PARMSA;
  4052.  
  4053. { parameter block for MCI_PLAY command message }
  4054. type
  4055.   PMCI_Anim_Play_Parms = ^TMCI_Anim_Play_Parms;
  4056.   {$EXTERNALSYM tagMCI_ANIM_PLAY_PARMS}
  4057.   tagMCI_ANIM_PLAY_PARMS = record
  4058.     dwCallback: DWORD;
  4059.     dwFrom: DWORD;
  4060.     dwTo: DWORD;
  4061.     dwSpeed: DWORD;
  4062.   end;
  4063.   TMCI_Anim_Play_Parms = tagMCI_ANIM_PLAY_PARMS;
  4064.   {$EXTERNALSYM MCI_ANIM_PLAY_PARMS}
  4065.   MCI_ANIM_PLAY_PARMS = tagMCI_ANIM_PLAY_PARMS;
  4066.  
  4067. { parameter block for MCI_STEP command message }
  4068. type
  4069.   PMCI_Anim_Step_Parms = ^TMCI_Anim_Step_Parms;
  4070.   {$EXTERNALSYM tagMCI_ANIM_STEP_PARMS}
  4071.   tagMCI_ANIM_STEP_PARMS = record
  4072.     dwCallback: DWORD;
  4073.     dwFrames: DWORD;
  4074.   end;
  4075.   TMCI_Anim_Step_Parms = tagMCI_ANIM_STEP_PARMS;
  4076.   {$EXTERNALSYM MCI_ANIM_STEP_PARMS}
  4077.   MCI_ANIM_STEP_PARMS = tagMCI_ANIM_STEP_PARMS;
  4078.  
  4079. { parameter block for MCI_WINDOW command message }
  4080. type
  4081.   PMCI_Anim_Window_ParmsA = ^TMCI_Anim_Window_ParmsA;
  4082.   PMCI_Anim_Window_ParmsW = ^TMCI_Anim_Window_ParmsW;
  4083.   PMCI_Anim_Window_Parms = PMCI_Anim_Window_ParmsA;
  4084.   {$EXTERNALSYM tagMCI_ANIM_WINDOW_PARMSA}
  4085.   tagMCI_ANIM_WINDOW_PARMSA = record
  4086.     dwCallback: DWORD;
  4087.     Wnd: HWND;  { formerly "hWnd" }
  4088.     nCmdShow: UINT;
  4089.     lpstrText: PAnsiChar;
  4090.   end;
  4091.   {$EXTERNALSYM tagMCI_ANIM_WINDOW_PARMSW}
  4092.   tagMCI_ANIM_WINDOW_PARMSW = record
  4093.     dwCallback: DWORD;
  4094.     Wnd: HWND;  { formerly "hWnd" }
  4095.     nCmdShow: UINT;
  4096.     lpstrText: PWideChar;
  4097.   end;
  4098.   {$EXTERNALSYM tagMCI_ANIM_WINDOW_PARMS}
  4099.   tagMCI_ANIM_WINDOW_PARMS = tagMCI_ANIM_WINDOW_PARMSA;
  4100.   TMCI_Anim_Window_ParmsA = tagMCI_ANIM_WINDOW_PARMSA;
  4101.   TMCI_Anim_Window_ParmsW = tagMCI_ANIM_WINDOW_PARMSW;
  4102.   TMCI_Anim_Window_Parms = TMCI_Anim_Window_ParmsA;
  4103.   {$EXTERNALSYM MCI_ANIM_WINDOW_PARMSA}
  4104.   MCI_ANIM_WINDOW_PARMSA = tagMCI_ANIM_WINDOW_PARMSA;
  4105.   {$EXTERNALSYM MCI_ANIM_WINDOW_PARMSW}
  4106.   MCI_ANIM_WINDOW_PARMSW = tagMCI_ANIM_WINDOW_PARMSW;
  4107.   {$EXTERNALSYM MCI_ANIM_WINDOW_PARMS}
  4108.   MCI_ANIM_WINDOW_PARMS = MCI_ANIM_WINDOW_PARMSA;
  4109.  
  4110. { parameter block for MCI_PUT, MCI_UPDATE, MCI_WHERE command messages }
  4111. type
  4112.   PMCI_Anim_Rect_Parms = ^ TMCI_Anim_Rect_Parms;
  4113.   {$EXTERNALSYM tagMCI_ANIM_RECT_PARMS}
  4114.   tagMCI_ANIM_RECT_PARMS = record
  4115.     dwCallback: DWORD;
  4116.     rc: TRect;
  4117.   end;
  4118.   TMCI_Anim_Rect_Parms = tagMCI_ANIM_RECT_PARMS;
  4119.   {$EXTERNALSYM MCI_ANIM_RECT_PARMS}
  4120.   MCI_ANIM_RECT_PARMS = tagMCI_ANIM_RECT_PARMS;
  4121.  
  4122. { parameter block for MCI_UPDATE PARMS }
  4123. type
  4124.   PMCI_Anim_Update_Parms = ^TMCI_Anim_Update_Parms;
  4125.   {$EXTERNALSYM tagMCI_ANIM_UPDATE_PARMS}
  4126.   tagMCI_ANIM_UPDATE_PARMS = record
  4127.     dwCallback: DWORD;
  4128.     rc: TRect;
  4129.     hDC: HDC;
  4130.   end;
  4131.   TMCI_Anim_Update_Parms = tagMCI_ANIM_UPDATE_PARMS;
  4132.   {$EXTERNALSYM MCI_ANIM_UPDATE_PARMS}
  4133.   MCI_ANIM_UPDATE_PARMS = tagMCI_ANIM_UPDATE_PARMS;
  4134.  
  4135. { MCI extensions for video overlay devices }
  4136.  
  4137. { flags for dwFlags parameter of MCI_OPEN command message }
  4138. const
  4139.   {$EXTERNALSYM MCI_OVLY_OPEN_WS}
  4140.   MCI_OVLY_OPEN_WS                = $00010000;
  4141.   {$EXTERNALSYM MCI_OVLY_OPEN_PARENT}
  4142.   MCI_OVLY_OPEN_PARENT            = $00020000;
  4143.  
  4144. { flags for dwFlags parameter of MCI_STATUS command message }
  4145. const
  4146.   {$EXTERNALSYM MCI_OVLY_STATUS_HWND}
  4147.   MCI_OVLY_STATUS_HWND            = $00004001;
  4148.   {$EXTERNALSYM MCI_OVLY_STATUS_STRETCH}
  4149.   MCI_OVLY_STATUS_STRETCH         = $00004002;
  4150.  
  4151. { flags for dwFlags parameter of MCI_INFO command message }
  4152. const
  4153.   {$EXTERNALSYM MCI_OVLY_INFO_TEXT}
  4154.   MCI_OVLY_INFO_TEXT              = $00010000;
  4155.  
  4156. { flags for dwItem field of MCI_GETDEVCAPS_PARMS parameter block }
  4157. const
  4158.   {$EXTERNALSYM MCI_OVLY_GETDEVCAPS_CAN_STRETCH}
  4159.   MCI_OVLY_GETDEVCAPS_CAN_STRETCH = $00004001;
  4160.   {$EXTERNALSYM MCI_OVLY_GETDEVCAPS_CAN_FREEZE}
  4161.   MCI_OVLY_GETDEVCAPS_CAN_FREEZE  = $00004002;
  4162.   {$EXTERNALSYM MCI_OVLY_GETDEVCAPS_MAX_WINDOWS}
  4163.   MCI_OVLY_GETDEVCAPS_MAX_WINDOWS = $00004003;
  4164.  
  4165. { flags for dwFlags parameter of MCI_WINDOW command message }
  4166. const
  4167.   {$EXTERNALSYM MCI_OVLY_WINDOW_HWND}
  4168.   MCI_OVLY_WINDOW_HWND            = $00010000;
  4169.   {$EXTERNALSYM MCI_OVLY_WINDOW_STATE}
  4170.   MCI_OVLY_WINDOW_STATE           = $00040000;
  4171.   {$EXTERNALSYM MCI_OVLY_WINDOW_TEXT}
  4172.   MCI_OVLY_WINDOW_TEXT            = $00080000;
  4173.   {$EXTERNALSYM MCI_OVLY_WINDOW_ENABLE_STRETCH}
  4174.   MCI_OVLY_WINDOW_ENABLE_STRETCH  = $00100000;
  4175.   {$EXTERNALSYM MCI_OVLY_WINDOW_DISABLE_STRETCH}
  4176.   MCI_OVLY_WINDOW_DISABLE_STRETCH = $00200000;
  4177.  
  4178. { flags for hWnd parameter of MCI_OVLY_WINDOW_PARMS parameter block }
  4179. const
  4180.   {$EXTERNALSYM MCI_OVLY_WINDOW_DEFAULT}
  4181.   MCI_OVLY_WINDOW_DEFAULT         = $00000000;
  4182.  
  4183. { flags for dwFlags parameter of MCI_PUT command message }
  4184. const
  4185.   {$EXTERNALSYM MCI_OVLY_RECT}
  4186.   MCI_OVLY_RECT                   = $00010000;
  4187.   {$EXTERNALSYM MCI_OVLY_PUT_SOURCE}
  4188.   MCI_OVLY_PUT_SOURCE             = $00020000;
  4189.   {$EXTERNALSYM MCI_OVLY_PUT_DESTINATION}
  4190.   MCI_OVLY_PUT_DESTINATION        = $00040000;
  4191.   {$EXTERNALSYM MCI_OVLY_PUT_FRAME}
  4192.   MCI_OVLY_PUT_FRAME              = $00080000;
  4193.   {$EXTERNALSYM MCI_OVLY_PUT_VIDEO}
  4194.   MCI_OVLY_PUT_VIDEO              = $00100000;
  4195.  
  4196. { flags for dwFlags parameter of MCI_WHERE command message }
  4197. const
  4198.   {$EXTERNALSYM MCI_OVLY_WHERE_SOURCE}
  4199.   MCI_OVLY_WHERE_SOURCE           = $00020000;
  4200.   {$EXTERNALSYM MCI_OVLY_WHERE_DESTINATION}
  4201.   MCI_OVLY_WHERE_DESTINATION      = $00040000;
  4202.   {$EXTERNALSYM MCI_OVLY_WHERE_FRAME}
  4203.   MCI_OVLY_WHERE_FRAME            = $00080000;
  4204.   {$EXTERNALSYM MCI_OVLY_WHERE_VIDEO}
  4205.   MCI_OVLY_WHERE_VIDEO            = $00100000;
  4206.  
  4207. { parameter block for MCI_OPEN command message }
  4208. type
  4209.   PMCI_Ovly_Open_ParmsA = ^TMCI_Ovly_Open_ParmsA;
  4210.   PMCI_Ovly_Open_ParmsW = ^TMCI_Ovly_Open_ParmsW;
  4211.   PMCI_Ovly_Open_Parms = PMCI_Ovly_Open_ParmsA;
  4212.   {$EXTERNALSYM tagMCI_OVLY_OPEN_PARMSA}
  4213.   tagMCI_OVLY_OPEN_PARMSA = record
  4214.     dwCallback: DWORD;
  4215.     wDeviceID: MCIDEVICEID;
  4216.     lpstrDeviceType: PAnsiChar;
  4217.     lpstrElementName: PAnsiChar;
  4218.     lpstrAlias: PAnsiChar;
  4219.     dwStyle: DWORD;
  4220.     hWndParent: HWND;
  4221.   end;
  4222.   {$EXTERNALSYM tagMCI_OVLY_OPEN_PARMSW}
  4223.   tagMCI_OVLY_OPEN_PARMSW = record
  4224.     dwCallback: DWORD;
  4225.     wDeviceID: MCIDEVICEID;
  4226.     lpstrDeviceType: PWideChar;
  4227.     lpstrElementName: PWideChar;
  4228.     lpstrAlias: PWideChar;
  4229.     dwStyle: DWORD;
  4230.     hWndParent: HWND;
  4231.   end;
  4232.   {$EXTERNALSYM tagMCI_OVLY_OPEN_PARMS}
  4233.   tagMCI_OVLY_OPEN_PARMS = tagMCI_OVLY_OPEN_PARMSA;
  4234.   TMCI_Ovly_Open_ParmsA = tagMCI_OVLY_OPEN_PARMSA;
  4235.   TMCI_Ovly_Open_ParmsW = tagMCI_OVLY_OPEN_PARMSW;
  4236.   TMCI_Ovly_Open_Parms = TMCI_Ovly_Open_ParmsA;
  4237.   {$EXTERNALSYM MCI_OVLY_OPEN_PARMSA}
  4238.   MCI_OVLY_OPEN_PARMSA = tagMCI_OVLY_OPEN_PARMSA;
  4239.   {$EXTERNALSYM MCI_OVLY_OPEN_PARMSW}
  4240.   MCI_OVLY_OPEN_PARMSW = tagMCI_OVLY_OPEN_PARMSW;
  4241.   {$EXTERNALSYM MCI_OVLY_OPEN_PARMS}
  4242.   MCI_OVLY_OPEN_PARMS = MCI_OVLY_OPEN_PARMSA;
  4243.  
  4244. { parameter block for MCI_WINDOW command message }
  4245. type
  4246.   PMCI_Ovly_Window_ParmsA = ^TMCI_Ovly_Window_ParmsA;
  4247.   PMCI_Ovly_Window_ParmsW = ^TMCI_Ovly_Window_ParmsW;
  4248.   PMCI_Ovly_Window_Parms = PMCI_Ovly_Window_ParmsA;
  4249.   {$EXTERNALSYM tagMCI_OVLY_WINDOW_PARMSA}
  4250.   tagMCI_OVLY_WINDOW_PARMSA = record
  4251.     dwCallback: DWORD;
  4252.     WHandle: HWND; { formerly "hWnd"}
  4253.     nCmdShow: UINT;
  4254.     lpstrText: PAnsiChar;
  4255.   end;
  4256.   {$EXTERNALSYM tagMCI_OVLY_WINDOW_PARMSW}
  4257.   tagMCI_OVLY_WINDOW_PARMSW = record
  4258.     dwCallback: DWORD;
  4259.     WHandle: HWND; { formerly "hWnd"}
  4260.     nCmdShow: UINT;
  4261.     lpstrText: PWideChar;
  4262.   end;
  4263.   {$EXTERNALSYM tagMCI_OVLY_WINDOW_PARMS}
  4264.   tagMCI_OVLY_WINDOW_PARMS = tagMCI_OVLY_WINDOW_PARMSA;
  4265.   TMCI_Ovly_Window_ParmsA = tagMCI_OVLY_WINDOW_PARMSA;
  4266.   TMCI_Ovly_Window_ParmsW = tagMCI_OVLY_WINDOW_PARMSW;
  4267.   TMCI_Ovly_Window_Parms = TMCI_Ovly_Window_ParmsA;
  4268.   {$EXTERNALSYM MCI_OVLY_WINDOW_PARMSA}
  4269.   MCI_OVLY_WINDOW_PARMSA = tagMCI_OVLY_WINDOW_PARMSA;
  4270.   {$EXTERNALSYM MCI_OVLY_WINDOW_PARMSW}
  4271.   MCI_OVLY_WINDOW_PARMSW = tagMCI_OVLY_WINDOW_PARMSW;
  4272.   {$EXTERNALSYM MCI_OVLY_WINDOW_PARMS}
  4273.   MCI_OVLY_WINDOW_PARMS = MCI_OVLY_WINDOW_PARMSA;
  4274.  
  4275. { parameter block for MCI_PUT, MCI_UPDATE, and MCI_WHERE command messages }
  4276. type
  4277.   PMCI_Ovly_Rect_Parms = ^ TMCI_Ovly_Rect_Parms;
  4278.   {$EXTERNALSYM tagMCI_OVLY_RECT_PARMS}
  4279.   tagMCI_OVLY_RECT_PARMS = record
  4280.     dwCallback: DWORD;
  4281.     rc: TRect;
  4282.   end;
  4283.   TMCI_Ovly_Rect_Parms = tagMCI_OVLY_RECT_PARMS;
  4284.   {$EXTERNALSYM MCI_OVLY_RECT_PARMS}
  4285.   MCI_OVLY_RECT_PARMS = tagMCI_OVLY_RECT_PARMS;
  4286.  
  4287. { parameter block for MCI_SAVE command message }
  4288. type
  4289.   PMCI_Ovly_Save_ParmsA = ^TMCI_Ovly_Save_ParmsA;
  4290.   PMCI_Ovly_Save_ParmsW = ^TMCI_Ovly_Save_ParmsW;
  4291.   PMCI_Ovly_Save_Parms = PMCI_Ovly_Save_ParmsA;
  4292.   {$EXTERNALSYM tagMCI_OVLY_SAVE_PARMSA}
  4293.   tagMCI_OVLY_SAVE_PARMSA = record
  4294.     dwCallback: DWORD;
  4295.     lpfilename: PAnsiChar;
  4296.     rc: TRect;
  4297.   end;
  4298.   {$EXTERNALSYM tagMCI_OVLY_SAVE_PARMSW}
  4299.   tagMCI_OVLY_SAVE_PARMSW = record
  4300.     dwCallback: DWORD;
  4301.     lpfilename: PWideChar;
  4302.     rc: TRect;
  4303.   end;
  4304.   {$EXTERNALSYM tagMCI_OVLY_SAVE_PARMS}
  4305.   tagMCI_OVLY_SAVE_PARMS = tagMCI_OVLY_SAVE_PARMSA;
  4306.   TMCI_Ovly_Save_ParmsA = tagMCI_OVLY_SAVE_PARMSA;
  4307.   TMCI_Ovly_Save_ParmsW = tagMCI_OVLY_SAVE_PARMSW;
  4308.   TMCI_Ovly_Save_Parms = TMCI_Ovly_Save_ParmsA;
  4309.   {$EXTERNALSYM MCI_OVLY_SAVE_PARMSA}
  4310.   MCI_OVLY_SAVE_PARMSA = tagMCI_OVLY_SAVE_PARMSA;
  4311.   {$EXTERNALSYM MCI_OVLY_SAVE_PARMSW}
  4312.   MCI_OVLY_SAVE_PARMSW = tagMCI_OVLY_SAVE_PARMSW;
  4313.   {$EXTERNALSYM MCI_OVLY_SAVE_PARMS}
  4314.   MCI_OVLY_SAVE_PARMS = MCI_OVLY_SAVE_PARMSA;
  4315.  
  4316. { parameter block for MCI_LOAD command message }
  4317. type
  4318.   PMCI_Ovly_Load_ParmsA = ^TMCI_Ovly_Load_ParmsA;
  4319.   PMCI_Ovly_Load_ParmsW = ^TMCI_Ovly_Load_ParmsW;
  4320.   PMCI_Ovly_Load_Parms = PMCI_Ovly_Load_ParmsA;
  4321.   {$EXTERNALSYM tagMCI_OVLY_LOAD_PARMSA}
  4322.   tagMCI_OVLY_LOAD_PARMSA = record
  4323.     dwCallback: DWORD;
  4324.     lpfilename: PAnsiChar;
  4325.     rc: TRect;
  4326.   end;
  4327.   {$EXTERNALSYM tagMCI_OVLY_LOAD_PARMSW}
  4328.   tagMCI_OVLY_LOAD_PARMSW = record
  4329.     dwCallback: DWORD;
  4330.     lpfilename: PWideChar;
  4331.     rc: TRect;
  4332.   end;
  4333.   {$EXTERNALSYM tagMCI_OVLY_LOAD_PARMS}
  4334.   tagMCI_OVLY_LOAD_PARMS = tagMCI_OVLY_LOAD_PARMSA;
  4335.   TMCI_Ovly_Load_ParmsA = tagMCI_OVLY_LOAD_PARMSA;
  4336.   TMCI_Ovly_Load_ParmsW = tagMCI_OVLY_LOAD_PARMSW;
  4337.   TMCI_Ovly_Load_Parms = TMCI_Ovly_Load_ParmsA;
  4338.   {$EXTERNALSYM MCI_OVLY_LOAD_PARMSA}
  4339.   MCI_OVLY_LOAD_PARMSA = tagMCI_OVLY_LOAD_PARMSA;
  4340.   {$EXTERNALSYM MCI_OVLY_LOAD_PARMSW}
  4341.   MCI_OVLY_LOAD_PARMSW = tagMCI_OVLY_LOAD_PARMSW;
  4342.   {$EXTERNALSYM MCI_OVLY_LOAD_PARMS}
  4343.   MCI_OVLY_LOAD_PARMS = MCI_OVLY_LOAD_PARMSA;
  4344.  
  4345.  
  4346. {***************************************************************************
  4347.  
  4348.                         DISPLAY Driver extensions
  4349.  
  4350. ***************************************************************************}
  4351.  
  4352. const
  4353.   {$EXTERNALSYM NEWTRANSPARENT}
  4354.   NEWTRANSPARENT  = 3;           { use with SetBkMode() }
  4355.   {$EXTERNALSYM QUERYROPSUPPORT}
  4356.   QUERYROPSUPPORT = 40;          { use to determine ROP support }
  4357.  
  4358. {***************************************************************************
  4359.  
  4360.                         DIB Driver extensions
  4361.  
  4362. ***************************************************************************}
  4363. const
  4364.   {$EXTERNALSYM SELECTDIB}
  4365.   SELECTDIB       = 41;                      { DIB.DRV select dib escape }
  4366.  
  4367. function DIBIndex(N: Integer): Longint;
  4368.  
  4369. {***************************************************************************
  4370.  
  4371.                         ScreenSaver support
  4372.  
  4373.     The current application will receive a syscommand of SC_SCREENSAVE just
  4374.     before the screen saver is invoked.  If the app wishes to prevent a
  4375.     screen save, return a non-zero value, otherwise call DefWindowProc().
  4376.  
  4377. ***************************************************************************}
  4378.  
  4379. const
  4380.   {$EXTERNALSYM SC_SCREENSAVE}
  4381.   SC_SCREENSAVE   = $F140;
  4382.  
  4383.   mmsyst = 'winmm.dll';
  4384.  
  4385. implementation
  4386.  
  4387. {$EXTERNALSYM auxGetDevCapsA}
  4388. function auxGetDevCapsA; external mmsyst name 'auxGetDevCapsA';
  4389. {$EXTERNALSYM auxGetDevCapsW}
  4390. function auxGetDevCapsW; external mmsyst name 'auxGetDevCapsW';
  4391. {$EXTERNALSYM auxGetDevCaps}
  4392. function auxGetDevCaps; external mmsyst name 'auxGetDevCapsA';
  4393. {$EXTERNALSYM auxGetNumDevs}
  4394. function auxGetNumDevs; external mmsyst name 'auxGetNumDevs';
  4395. {$EXTERNALSYM auxGetVolume}
  4396. function auxGetVolume; external mmsyst name 'auxGetVolume';
  4397. {$EXTERNALSYM auxOutMessage}
  4398. function auxOutMessage; external mmsyst name 'auxOutMessage';
  4399. {$EXTERNALSYM auxSetVolume}
  4400. function auxSetVolume; external mmsyst name 'auxSetVolume';
  4401. {$EXTERNALSYM CloseDriver}
  4402. function CloseDriver; external mmsyst name 'CloseDriver';
  4403. {$EXTERNALSYM DefDriverProc}
  4404. function DefDriverProc; external mmsyst name 'DefDriverProc';
  4405. {$EXTERNALSYM DrvGetModuleHandle}
  4406. function DrvGetModuleHandle; external mmsyst name 'DrvGetModuleHandle';
  4407. {$EXTERNALSYM GetDriverModuleHandle}
  4408. function GetDriverModuleHandle; external mmsyst name 'GetDriverModuleHandle';
  4409. {$EXTERNALSYM joyGetDevCapsA}
  4410. function joyGetDevCapsA; external mmsyst name 'joyGetDevCapsA';
  4411. {$EXTERNALSYM joyGetDevCapsW}
  4412. function joyGetDevCapsW; external mmsyst name 'joyGetDevCapsW';
  4413. {$EXTERNALSYM joyGetDevCaps}
  4414. function joyGetDevCaps; external mmsyst name 'joyGetDevCapsA';
  4415. {$EXTERNALSYM joyGetNumDevs}
  4416. function joyGetNumDevs; external mmsyst name 'joyGetNumDevs';
  4417. {$EXTERNALSYM joyGetPos}
  4418. function joyGetPos; external mmsyst name 'joyGetPos';
  4419. {$EXTERNALSYM joyGetPosEx}
  4420. function joyGetPosEx; external mmsyst name 'joyGetPosEx';
  4421. {$EXTERNALSYM joyGetThreshold}
  4422. function joyGetThreshold; external mmsyst name 'joyGetThreshold';
  4423. {$EXTERNALSYM joyReleaseCapture}
  4424. function joyReleaseCapture; external mmsyst name 'joyReleaseCapture';
  4425. {$EXTERNALSYM joySetCapture}
  4426. function joySetCapture; external mmsyst name 'joySetCapture';
  4427. {$EXTERNALSYM joySetThreshold}
  4428. function joySetThreshold; external mmsyst name 'joySetThreshold';
  4429. {$EXTERNALSYM mciExecute}
  4430. function mciExecute; external mmsyst name 'mciExecute';
  4431. {$EXTERNALSYM mciGetCreatorTask}
  4432. function mciGetCreatorTask; external mmsyst name 'mciGetCreatorTask';
  4433. {$EXTERNALSYM mciGetDeviceIDA}
  4434. function mciGetDeviceIDA; external mmsyst name 'mciGetDeviceIDA';
  4435. {$EXTERNALSYM mciGetDeviceIDW}
  4436. function mciGetDeviceIDW; external mmsyst name 'mciGetDeviceIDW';
  4437. {$EXTERNALSYM mciGetDeviceID}
  4438. function mciGetDeviceID; external mmsyst name 'mciGetDeviceIDA';
  4439. {$EXTERNALSYM mciGetDeviceIDFromElementIDA}
  4440. function mciGetDeviceIDFromElementIDA; external mmsyst name 'mciGetDeviceIDFromElementIDA';
  4441. {$EXTERNALSYM mciGetDeviceIDFromElementIDW}
  4442. function mciGetDeviceIDFromElementIDW; external mmsyst name 'mciGetDeviceIDFromElementIDW';
  4443. {$EXTERNALSYM mciGetDeviceIDFromElementID}
  4444. function mciGetDeviceIDFromElementID; external mmsyst name 'mciGetDeviceIDFromElementIDA';
  4445. {$EXTERNALSYM mciGetErrorStringA}
  4446. function mciGetErrorStringA; external mmsyst name 'mciGetErrorStringA';
  4447. {$EXTERNALSYM mciGetErrorStringW}
  4448. function mciGetErrorStringW; external mmsyst name 'mciGetErrorStringW';
  4449. {$EXTERNALSYM mciGetErrorString}
  4450. function mciGetErrorString; external mmsyst name 'mciGetErrorStringA';
  4451. {$EXTERNALSYM mciGetYieldProc}
  4452. function mciGetYieldProc; external mmsyst name 'mciGetYieldProc';
  4453. {$EXTERNALSYM mciSendCommandA}
  4454. function mciSendCommandA; external mmsyst name 'mciSendCommandA';
  4455. {$EXTERNALSYM mciSendCommandW}
  4456. function mciSendCommandW; external mmsyst name 'mciSendCommandW';
  4457. {$EXTERNALSYM mciSendCommand}
  4458. function mciSendCommand; external mmsyst name 'mciSendCommandA';
  4459. {$EXTERNALSYM mciSendStringA}
  4460. function mciSendStringA; external mmsyst name 'mciSendStringA';
  4461. {$EXTERNALSYM mciSendStringW}
  4462. function mciSendStringW; external mmsyst name 'mciSendStringW';
  4463. {$EXTERNALSYM mciSendString}
  4464. function mciSendString; external mmsyst name 'mciSendStringA';
  4465. {$EXTERNALSYM mciSetYieldProc}
  4466. function mciSetYieldProc; external mmsyst name 'mciSetYieldProc';
  4467. {$EXTERNALSYM midiConnect}
  4468. function midiConnect; external mmsyst name 'midiConnect';
  4469. {$EXTERNALSYM midiDisconnect}
  4470. function midiDisconnect; external mmsyst name 'midiDisconnect';
  4471. {$EXTERNALSYM midiInAddBuffer}
  4472. function midiInAddBuffer; external mmsyst name 'midiInAddBuffer';
  4473. {$EXTERNALSYM midiInClose}
  4474. function midiInClose; external mmsyst name 'midiInClose';
  4475. {$EXTERNALSYM midiInGetDevCapsA}
  4476. function midiInGetDevCapsA; external mmsyst name 'midiInGetDevCapsA';
  4477. {$EXTERNALSYM midiInGetDevCapsW}
  4478. function midiInGetDevCapsW; external mmsyst name 'midiInGetDevCapsW';
  4479. {$EXTERNALSYM midiInGetDevCaps}
  4480. function midiInGetDevCaps; external mmsyst name 'midiInGetDevCapsA';
  4481. {$EXTERNALSYM midiInGetErrorTextA}
  4482. function midiInGetErrorTextA; external mmsyst name 'midiInGetErrorTextA';
  4483. {$EXTERNALSYM midiInGetErrorTextW}
  4484. function midiInGetErrorTextW; external mmsyst name 'midiInGetErrorTextW';
  4485. {$EXTERNALSYM midiInGetErrorText}
  4486. function midiInGetErrorText; external mmsyst name 'midiInGetErrorTextA';
  4487. {$EXTERNALSYM midiInGetID}
  4488. function midiInGetID; external mmsyst name 'midiInGetID';
  4489. {$EXTERNALSYM midiInGetNumDevs}
  4490. function midiInGetNumDevs; external mmsyst name 'midiInGetNumDevs';
  4491. {$EXTERNALSYM midiInMessage}
  4492. function midiInMessage; external mmsyst name 'midiInMessage';
  4493. {$EXTERNALSYM midiInOpen}
  4494. function midiInOpen; external mmsyst name 'midiInOpen';
  4495. {$EXTERNALSYM midiInPrepareHeader}
  4496. function midiInPrepareHeader; external mmsyst name 'midiInPrepareHeader';
  4497. {$EXTERNALSYM midiInReset}
  4498. function midiInReset; external mmsyst name 'midiInReset';
  4499. {$EXTERNALSYM midiInStart}
  4500. function midiInStart; external mmsyst name 'midiInStart';
  4501. {$EXTERNALSYM midiInStop}
  4502. function midiInStop; external mmsyst name 'midiInStop';
  4503. {$EXTERNALSYM midiInUnprepareHeader}
  4504. function midiInUnprepareHeader; external mmsyst name 'midiInUnprepareHeader';
  4505. {$EXTERNALSYM midiOutCacheDrumPatches}
  4506. function midiOutCacheDrumPatches; external mmsyst name 'midiOutCacheDrumPatches';
  4507. {$EXTERNALSYM midiOutCachePatches}
  4508. function midiOutCachePatches; external mmsyst name 'midiOutCachePatches';
  4509. {$EXTERNALSYM midiOutClose}
  4510. function midiOutClose; external mmsyst name 'midiOutClose';
  4511. {$EXTERNALSYM midiOutGetDevCapsA}
  4512. function midiOutGetDevCapsA; external mmsyst name 'midiOutGetDevCapsA';
  4513. {$EXTERNALSYM midiOutGetDevCapsW}
  4514. function midiOutGetDevCapsW; external mmsyst name 'midiOutGetDevCapsW';
  4515. {$EXTERNALSYM midiOutGetDevCaps}
  4516. function midiOutGetDevCaps; external mmsyst name 'midiOutGetDevCapsA';
  4517. {$EXTERNALSYM midiOutGetErrorTextA}
  4518. function midiOutGetErrorTextA; external mmsyst name 'midiOutGetErrorTextA';
  4519. {$EXTERNALSYM midiOutGetErrorTextW}
  4520. function midiOutGetErrorTextW; external mmsyst name 'midiOutGetErrorTextW';
  4521. {$EXTERNALSYM midiOutGetErrorText}
  4522. function midiOutGetErrorText; external mmsyst name 'midiOutGetErrorTextA';
  4523. {$EXTERNALSYM midiOutGetID}
  4524. function midiOutGetID; external mmsyst name 'midiOutGetID';
  4525. {$EXTERNALSYM midiOutGetNumDevs}
  4526. function midiOutGetNumDevs; external mmsyst name 'midiOutGetNumDevs';
  4527. {$EXTERNALSYM midiOutGetVolume}
  4528. function midiOutGetVolume; external mmsyst name 'midiOutGetVolume';
  4529. {$EXTERNALSYM midiOutLongMsg}
  4530. function midiOutLongMsg; external mmsyst name 'midiOutLongMsg';
  4531. {$EXTERNALSYM midiOutMessage}
  4532. function midiOutMessage; external mmsyst name 'midiOutMessage';
  4533. {$EXTERNALSYM midiOutOpen}
  4534. function midiOutOpen; external mmsyst name 'midiOutOpen';
  4535. {$EXTERNALSYM midiOutPrepareHeader}
  4536. function midiOutPrepareHeader; external mmsyst name 'midiOutPrepareHeader';
  4537. {$EXTERNALSYM midiOutReset}
  4538. function midiOutReset; external mmsyst name 'midiOutReset';
  4539. {$EXTERNALSYM midiOutSetVolume}
  4540. function midiOutSetVolume; external mmsyst name 'midiOutSetVolume';
  4541. {$EXTERNALSYM midiOutShortMsg}
  4542. function midiOutShortMsg; external mmsyst name 'midiOutShortMsg';
  4543. {$EXTERNALSYM midiOutUnprepareHeader}
  4544. function midiOutUnprepareHeader; external mmsyst name 'midiOutUnprepareHeader';
  4545. {$EXTERNALSYM midiStreamClose}
  4546. function midiStreamClose; external mmsyst name 'midiStreamClose';
  4547. {$EXTERNALSYM midiStreamOpen}
  4548. function midiStreamOpen; external mmsyst name 'midiStreamOpen';
  4549. {$EXTERNALSYM midiStreamOut}
  4550. function midiStreamOut; external mmsyst name 'midiStreamOut';
  4551. {$EXTERNALSYM midiStreamPause}
  4552. function midiStreamPause; external mmsyst name 'midiStreamPause';
  4553. {$EXTERNALSYM midiStreamPosition}
  4554. function midiStreamPosition; external mmsyst name 'midiStreamPosition';
  4555. {$EXTERNALSYM midiStreamProperty}
  4556. function midiStreamProperty; external mmsyst name 'midiStreamProperty';
  4557. {$EXTERNALSYM midiStreamRestart}
  4558. function midiStreamRestart; external mmsyst name 'midiStreamRestart';
  4559. {$EXTERNALSYM midiStreamStop}
  4560. function midiStreamStop; external mmsyst name 'midiStreamStop';
  4561. {$EXTERNALSYM mixerClose}
  4562. function mixerClose; external mmsyst name 'mixerClose';
  4563. {$EXTERNALSYM mixerGetControlDetailsA}
  4564. function mixerGetControlDetailsA; external mmsyst name 'mixerGetControlDetailsA';
  4565. {$EXTERNALSYM mixerGetControlDetailsW}
  4566. function mixerGetControlDetailsW; external mmsyst name 'mixerGetControlDetailsW';
  4567. {$EXTERNALSYM mixerGetControlDetails}
  4568. function mixerGetControlDetails; external mmsyst name 'mixerGetControlDetailsA';
  4569. {$EXTERNALSYM mixerGetDevCapsA}
  4570. function mixerGetDevCapsA; external mmsyst name 'mixerGetDevCapsA';
  4571. {$EXTERNALSYM mixerGetDevCapsW}
  4572. function mixerGetDevCapsW; external mmsyst name 'mixerGetDevCapsW';
  4573. {$EXTERNALSYM mixerGetDevCaps}
  4574. function mixerGetDevCaps; external mmsyst name 'mixerGetDevCapsA';
  4575. {$EXTERNALSYM mixerGetID}
  4576. function mixerGetID; external mmsyst name 'mixerGetID';
  4577. {$EXTERNALSYM mixerGetLineControlsA}
  4578. function mixerGetLineControlsA; external mmsyst name 'mixerGetLineControlsA';
  4579. {$EXTERNALSYM mixerGetLineControlsW}
  4580. function mixerGetLineControlsW; external mmsyst name 'mixerGetLineControlsW';
  4581. {$EXTERNALSYM mixerGetLineControls}
  4582. function mixerGetLineControls; external mmsyst name 'mixerGetLineControlsA';
  4583. {$EXTERNALSYM mixerGetLineInfoA}
  4584. function mixerGetLineInfoA; external mmsyst name 'mixerGetLineInfoA';
  4585. {$EXTERNALSYM mixerGetLineInfoW}
  4586. function mixerGetLineInfoW; external mmsyst name 'mixerGetLineInfoW';
  4587. {$EXTERNALSYM mixerGetLineInfo}
  4588. function mixerGetLineInfo; external mmsyst name 'mixerGetLineInfoA';
  4589. {$EXTERNALSYM mixerGetNumDevs}
  4590. function mixerGetNumDevs; external mmsyst name 'mixerGetNumDevs';
  4591. function mixerMessage; external mmsyst name 'mixerMessage';
  4592. {$EXTERNALSYM mixerOpen}
  4593. function mixerOpen; external mmsyst name 'mixerOpen';
  4594. {$EXTERNALSYM mixerSetControlDetails}
  4595. function mixerSetControlDetails; external mmsyst name 'mixerSetControlDetails';
  4596. {$EXTERNALSYM mmioAdvance}
  4597. function mmioAdvance; external mmsyst name 'mmioAdvance';
  4598. {$EXTERNALSYM mmioAscend}
  4599. function mmioAscend; external mmsyst name 'mmioAscend';
  4600. {$EXTERNALSYM mmioClose}
  4601. function mmioClose; external mmsyst name 'mmioClose';
  4602. {$EXTERNALSYM mmioCreateChunk}
  4603. function mmioCreateChunk; external mmsyst name 'mmioCreateChunk';
  4604. {$EXTERNALSYM mmioDescend}
  4605. function mmioDescend; external mmsyst name 'mmioDescend';
  4606. {$EXTERNALSYM mmioFlush}
  4607. function mmioFlush; external mmsyst name 'mmioFlush';
  4608. {$EXTERNALSYM mmioGetInfo}
  4609. function mmioGetInfo; external mmsyst name 'mmioGetInfo';
  4610. {$EXTERNALSYM mmioInstallIOProcA}
  4611. function mmioInstallIOProcA; external mmsyst name 'mmioInstallIOProcA';
  4612. {$EXTERNALSYM mmioInstallIOProcW}
  4613. function mmioInstallIOProcW; external mmsyst name 'mmioInstallIOProcW';
  4614. {$EXTERNALSYM mmioInstallIOProc}
  4615. function mmioInstallIOProc; external mmsyst name 'mmioInstallIOProcA';
  4616. {$EXTERNALSYM mmioOpenA}
  4617. function mmioOpenA; external mmsyst name 'mmioOpenA';
  4618. {$EXTERNALSYM mmioOpenW}
  4619. function mmioOpenW; external mmsyst name 'mmioOpenW';
  4620. {$EXTERNALSYM mmioOpen}
  4621. function mmioOpen; external mmsyst name 'mmioOpenA';
  4622. {$EXTERNALSYM mmioRead}
  4623. function mmioRead; external mmsyst name 'mmioRead';
  4624. {$EXTERNALSYM mmioRenameA}
  4625. function mmioRenameA; external mmsyst name 'mmioRenameA';
  4626. {$EXTERNALSYM mmioRenameW}
  4627. function mmioRenameW; external mmsyst name 'mmioRenameW';
  4628. {$EXTERNALSYM mmioRename}
  4629. function mmioRename; external mmsyst name 'mmioRenameA';
  4630. {$EXTERNALSYM mmioSeek}
  4631. function mmioSeek; external mmsyst name 'mmioSeek';
  4632. {$EXTERNALSYM mmioSendMessage}
  4633. function mmioSendMessage; external mmsyst name 'mmioSendMessage';
  4634. {$EXTERNALSYM mmioSetBuffer}
  4635. function mmioSetBuffer; external mmsyst name 'mmioSetBuffer';
  4636. {$EXTERNALSYM mmioSetInfo}
  4637. function mmioSetInfo; external mmsyst name 'mmioSetInfo';
  4638. {$EXTERNALSYM mmioStringToFOURCCA}
  4639. function mmioStringToFOURCCA; external mmsyst name 'mmioStringToFOURCCA';
  4640. {$EXTERNALSYM mmioStringToFOURCCW}
  4641. function mmioStringToFOURCCW; external mmsyst name 'mmioStringToFOURCCW';
  4642. {$EXTERNALSYM mmioStringToFOURCC}
  4643. function mmioStringToFOURCC; external mmsyst name 'mmioStringToFOURCCA';
  4644. {$EXTERNALSYM mmioWrite}
  4645. function mmioWrite; external mmsyst name 'mmioWrite';
  4646. {$EXTERNALSYM mmsystemGetVersion}
  4647. function mmsystemGetVersion; external mmsyst name 'mmsystemGetVersion';
  4648. {$EXTERNALSYM OpenDriver}
  4649. function OpenDriver; external mmsyst name 'OpenDriver';
  4650. {$EXTERNALSYM PlaySoundA}
  4651. function PlaySoundA; external mmsyst name 'PlaySoundA';
  4652. {$EXTERNALSYM PlaySoundW}
  4653. function PlaySoundW; external mmsyst name 'PlaySoundW';
  4654. {$EXTERNALSYM PlaySound}
  4655. function PlaySound; external mmsyst name 'PlaySoundA';
  4656. {$EXTERNALSYM SendDriverMessage}
  4657. function SendDriverMessage; external mmsyst name 'SendDriverMessage';
  4658. {$EXTERNALSYM sndPlaySoundA}
  4659. function sndPlaySoundA; external mmsyst name 'sndPlaySoundA';
  4660. {$EXTERNALSYM sndPlaySoundW}
  4661. function sndPlaySoundW; external mmsyst name 'sndPlaySoundW';
  4662. {$EXTERNALSYM sndPlaySound}
  4663. function sndPlaySound; external mmsyst name 'sndPlaySoundA';
  4664. {$EXTERNALSYM timeBeginPeriod}
  4665. function timeBeginPeriod; external mmsyst name 'timeBeginPeriod';
  4666. {$EXTERNALSYM timeEndPeriod}
  4667. function timeEndPeriod; external mmsyst name 'timeEndPeriod';
  4668. {$EXTERNALSYM timeGetDevCaps}
  4669. function timeGetDevCaps; external mmsyst name 'timeGetDevCaps';
  4670. {$EXTERNALSYM timeGetSystemTime}
  4671. function timeGetSystemTime; external mmsyst name 'timeGetSystemTime';
  4672. {$EXTERNALSYM timeGetTime}
  4673. function timeGetTime; external mmsyst name 'timeGetTime';
  4674. {$EXTERNALSYM timeKillEvent}
  4675. function timeKillEvent; external mmsyst name 'timeKillEvent';
  4676. {$EXTERNALSYM timeSetEvent}
  4677. function timeSetEvent; external mmsyst name 'timeSetEvent';
  4678. {$EXTERNALSYM waveInAddBuffer}
  4679. function waveInAddBuffer; external mmsyst name 'waveInAddBuffer';
  4680. {$EXTERNALSYM waveInClose}
  4681. function waveInClose; external mmsyst name 'waveInClose';
  4682. {$EXTERNALSYM waveInGetDevCapsA}
  4683. function waveInGetDevCapsA; external mmsyst name 'waveInGetDevCapsA';
  4684. {$EXTERNALSYM waveInGetDevCapsW}
  4685. function waveInGetDevCapsW; external mmsyst name 'waveInGetDevCapsW';
  4686. {$EXTERNALSYM waveInGetDevCaps}
  4687. function waveInGetDevCaps; external mmsyst name 'waveInGetDevCapsA';
  4688. {$EXTERNALSYM waveInGetErrorTextA}
  4689. function waveInGetErrorTextA; external mmsyst name 'waveInGetErrorTextA';
  4690. {$EXTERNALSYM waveInGetErrorTextW}
  4691. function waveInGetErrorTextW; external mmsyst name 'waveInGetErrorTextW';
  4692. {$EXTERNALSYM waveInGetErrorText}
  4693. function waveInGetErrorText; external mmsyst name 'waveInGetErrorTextA';
  4694. {$EXTERNALSYM waveInGetID}
  4695. function waveInGetID; external mmsyst name 'waveInGetID';
  4696. {$EXTERNALSYM waveInGetNumDevs}
  4697. function waveInGetNumDevs; external mmsyst name 'waveInGetNumDevs';
  4698. {$EXTERNALSYM waveInGetPosition}
  4699. function waveInGetPosition; external mmsyst name 'waveInGetPosition';
  4700. {$EXTERNALSYM waveInMessage}
  4701. function waveInMessage; external mmsyst name 'waveInMessage';
  4702. {$EXTERNALSYM waveInOpen}
  4703. function waveInOpen; external mmsyst name 'waveInOpen';
  4704. {$EXTERNALSYM waveInPrepareHeader}
  4705. function waveInPrepareHeader; external mmsyst name 'waveInPrepareHeader';
  4706. {$EXTERNALSYM waveInReset}
  4707. function waveInReset; external mmsyst name 'waveInReset';
  4708. {$EXTERNALSYM waveInStart}
  4709. function waveInStart; external mmsyst name 'waveInStart';
  4710. {$EXTERNALSYM waveInStop}
  4711. function waveInStop; external mmsyst name 'waveInStop';
  4712. {$EXTERNALSYM waveInUnprepareHeader}
  4713. function waveInUnprepareHeader; external mmsyst name 'waveInUnprepareHeader';
  4714. {$EXTERNALSYM waveOutBreakLoop}
  4715. function waveOutBreakLoop; external mmsyst name 'waveOutBreakLoop';
  4716. {$EXTERNALSYM waveOutClose}
  4717. function waveOutClose; external mmsyst name 'waveOutClose';
  4718. {$EXTERNALSYM waveOutGetDevCapsA}
  4719. function waveOutGetDevCapsA; external mmsyst name 'waveOutGetDevCapsA';
  4720. {$EXTERNALSYM waveOutGetDevCapsW}
  4721. function waveOutGetDevCapsW; external mmsyst name 'waveOutGetDevCapsW';
  4722. {$EXTERNALSYM waveOutGetDevCaps}
  4723. function waveOutGetDevCaps; external mmsyst name 'waveOutGetDevCapsA';
  4724. {$EXTERNALSYM waveOutGetErrorTextA}
  4725. function waveOutGetErrorTextA; external mmsyst name 'waveOutGetErrorTextA';
  4726. {$EXTERNALSYM waveOutGetErrorTextW}
  4727. function waveOutGetErrorTextW; external mmsyst name 'waveOutGetErrorTextW';
  4728. {$EXTERNALSYM waveOutGetErrorText}
  4729. function waveOutGetErrorText; external mmsyst name 'waveOutGetErrorTextA';
  4730. {$EXTERNALSYM waveOutGetID}
  4731. function waveOutGetID; external mmsyst name 'waveOutGetID';
  4732. {$EXTERNALSYM waveOutGetNumDevs}
  4733. function waveOutGetNumDevs; external mmsyst name 'waveOutGetNumDevs';
  4734. {$EXTERNALSYM waveOutGetPitch}
  4735. function waveOutGetPitch; external mmsyst name 'waveOutGetPitch';
  4736. {$EXTERNALSYM waveOutGetPlaybackRate}
  4737. function waveOutGetPlaybackRate; external mmsyst name 'waveOutGetPlaybackRate';
  4738. {$EXTERNALSYM waveOutGetPosition}
  4739. function waveOutGetPosition; external mmsyst name 'waveOutGetPosition';
  4740. {$EXTERNALSYM waveOutGetVolume}
  4741. function waveOutGetVolume; external mmsyst name 'waveOutGetVolume';
  4742. {$EXTERNALSYM waveOutMessage}
  4743. function waveOutMessage; external mmsyst name 'waveOutMessage';
  4744. {$EXTERNALSYM waveOutOpen}
  4745. function waveOutOpen; external mmsyst name 'waveOutOpen';
  4746. {$EXTERNALSYM waveOutPause}
  4747. function waveOutPause; external mmsyst name 'waveOutPause';
  4748. {$EXTERNALSYM waveOutPrepareHeader}
  4749. function waveOutPrepareHeader; external mmsyst name 'waveOutPrepareHeader';
  4750. {$EXTERNALSYM waveOutReset}
  4751. function waveOutReset; external mmsyst name 'waveOutReset';
  4752. {$EXTERNALSYM waveOutRestart}
  4753. function waveOutRestart; external mmsyst name 'waveOutRestart';
  4754. {$EXTERNALSYM waveOutSetPitch}
  4755. function waveOutSetPitch; external mmsyst name 'waveOutSetPitch';
  4756. {$EXTERNALSYM waveOutSetPlaybackRate}
  4757. function waveOutSetPlaybackRate; external mmsyst name 'waveOutSetPlaybackRate';
  4758. {$EXTERNALSYM waveOutSetVolume}
  4759. function waveOutSetVolume; external mmsyst name 'waveOutSetVolume';
  4760. {$EXTERNALSYM waveOutUnprepareHeader}
  4761. function waveOutUnprepareHeader; external mmsyst name 'waveOutUnprepareHeader';
  4762. {$EXTERNALSYM waveOutWrite}
  4763. function waveOutWrite; external mmsyst name 'waveOutWrite';
  4764.  
  4765. function mci_MSF_Minute(msf: Longint): Byte;
  4766. begin
  4767.   Result := LoByte(LoWord(msf));
  4768. end;
  4769.  
  4770. function mci_MSF_Second(msf: Longint): Byte;
  4771. begin
  4772.   Result := HiByte(LoWord(msf));
  4773. end;
  4774.  
  4775. function mci_MSF_Frame(msf: Longint): Byte;
  4776. begin
  4777.   Result := LoByte(HiWord(msf));
  4778. end;
  4779.  
  4780. function mci_Make_MSF(m, s, f: Byte): Longint;
  4781. begin
  4782.   Result := Longint(m or (s shl 8) or (f shl 16));
  4783. end;
  4784.  
  4785. function mci_TMSF_Track(tmsf: Longint): Byte;
  4786. begin
  4787.   Result := LoByte(LoWord(tmsf));
  4788. end;
  4789.  
  4790. function mci_TMSF_Minute(tmsf: Longint): Byte;
  4791. begin
  4792.   Result := HiByte(LoWord(tmsf));
  4793. end;
  4794.  
  4795. function mci_TMSF_Second(tmsf: Longint): Byte;
  4796. begin
  4797.   Result := LoByte(HiWord(tmsf));
  4798. end;
  4799.  
  4800. function mci_TMSF_Frame(tmsf: Longint): Byte;
  4801. begin
  4802.   Result := HiByte(HiWord(tmsf));
  4803. end;
  4804.  
  4805. function mci_Make_TMSF(t, m, s, f: Byte): Longint;
  4806. begin
  4807.   Result := Longint(t or (m shl 8) or (s shl 16) or (f shl 24));
  4808. end;
  4809.  
  4810. function mci_HMS_Hour(hms: Longint): Byte;
  4811. begin
  4812.   Result := LoByte(LoWord(hms));
  4813. end;
  4814.  
  4815. function mci_HMS_Minute(hms: Longint): Byte;
  4816. begin
  4817.   Result := HiByte(LoWord(hms));
  4818. end;
  4819.  
  4820. function mci_HMS_Second(hms: Longint): Byte;
  4821. begin
  4822.   Result := LoByte(HiWord(hms));
  4823. end;
  4824.  
  4825. function mci_Make_HMS(h, m, s: Byte): Longint;
  4826. begin
  4827.   Result := Longint(h or (m shl 8) or (s shl 16));
  4828. end;
  4829.  
  4830. function DIBIndex(N: Integer): Longint;
  4831. begin
  4832.   Result := MakeLong(N, $10FF);
  4833. end;
  4834.  
  4835. end.
  4836.